jquery validation yyyy-MM-dd格式日期在ie中无法验证通过
2014-03-13 11:17
671 查看
问题
首先在ie6、7、8下面打开这个页面http://jqueryvalidation.org/date-method/,输入的日期格式为:yyyy-MM-dd验证不通过。![](https://oscdn.geek-share.com/Uploads/Images/Content/202003/28/f2efd019b8cda1691ef2dff48d694535.png)
格式要是:MM/dd/yyyy可以验证通过
![](https://oscdn.geek-share.com/Uploads/Images/Content/202003/28/4b2f26e13899174c73de2ff8c5fefcbd.png)
原因
查看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
![](https://oscdn.geek-share.com/Uploads/Images/Content/202003/28/d4820b2307ccfaccfc74996f1e7d9579.png)
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); };
相关文章推荐
- JQuery高性能最佳实践
- JQuery的键盘事件
- jquery 弹出对话框插件
- Mvc.JQuery.Datatables
- jQuery-UI学习tabs
- jQuery:获取浏览器中的分辨率
- JQuery Mobile表单
- 基于jquery的提交、编辑页面js编写框架
- 如何书写高质量的jQuery代码
- JQuery Mobile 页面过渡效果设置
- HTML 5 的自定义 data-* 属性和jquery的data()方法的使用
- 通过AJAX和PHP,提交JQuery Mobile表单
- jquery在新增加的元素上添加事件方法
- JQuery中$.ajax()方法参数详解
- jquery制作图片放大显示插件Lightbox2.6图片相册
- 应用于网站导航中的 12 个 jQuery 插件
- JQUERY解析XML IE8的兼容问题
- [jQuery]ajax同步请求在方法内问题
- JQuery 创建可折叠效果的菜单
- jQuery 初学者入门教程