jquery validation yyyy-MM-dd格式日期在ie中無法驗證通過


自己開發的公眾號,可以領取淘寶內部優惠券

問題

首先在ie6、7、8下面打開這個頁面http://jqueryvalidation.org/date-method/,輸入的日期格式為:yyyy-MM-dd驗證不通過。

格式要是:MM/dd/yyyy可以驗證通過

原因

查看validation的源代碼找到日期驗證函數發現,驗證表達式是通過Date的構造函數來實例化日期 !/Invalid|NaN/.test(new Date(value).toString())

 date: function (value, element) {
                return this.optional(element) || !/Invalid|NaN/.test(new Date(value).toString());
            }

而這個實例化在ie6、7、8下面得到的時NaN

this.optional(element)

在所有的驗證函數中都會先調用這個optional函數(required驗證函數除外),這是為什么呢?

如果value不為空,那么這個函數永遠返回false,這樣才能執行接下來的驗證。

如果value為空就會返回true,既然沒有值了也就不需要進行自定義函數的驗證。

解決方法

為了讓我們的日期格式支持yyyy-MM-dd這種格式看來只能重寫這個date函數

$.validator.methods.date = function (value, element) {
            var matches = /(\d{4})[-\/](\d{2})[-\/](\d{2})/.exec(value);
            if (matches == null) return this.optional(element)|| false;
            return this.optional(element) || true;
        };

 或是用dateISO驗證規則來替換默認的date驗證

$.validator.methods["date"] = function (value, element) {
            return $.validator.methods.dateISO.apply(this, arguments);
        };

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM