自己開發的公眾號,可以領取淘寶內部優惠券
問題
首先在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); };