修改jQuery Validation里默认的验证方法


Posted in Javascript onFebruary 14, 2012

在最近做的一个项目中,使用jQuery Validation验证日期,遇到的问题和一个没有预料到的情况是,在ASP.NET MVC 3的项目中,对于 <input type="date" data-val="true" />的元素,如果调用form的valid方法验证form,虽然我没有添加日期验证的设置,仅仅type="date",但其依然调用了日期验证逻辑来验证日期格式是否正确。这本来是个不错的行为,但问题在于,其支持的日期格式有限,阅读jQuery Validation的代码会知道(当然,文档中也有说明),对于“date”,日期验证只是利用Javascript内置的处理来验证,反映到代码里,就是看new Date(日期字符串)能否成功。在我的电脑中,输入日期"9/5/2012"可以验证通过,但“2012-9-5”验证失败,后者显然也是一种正确的格式。我需要改变或者改善这种行为。如何做?

当然,我们可以修改jQuery Validation的源代码,但是首先,我引用的是CDN上的代码,其次,作为一个public的库,我想还是尽量不要自己去改动,日久天长,可能我们已经忘记了对它的修改,而官方更新新版本时,我们弄下来更新,结果就把我们自己的修改给覆盖了。更好的办法,是打补丁,从外部把date的验证函数替换成我们自己的。这里或许要感谢Javascript的OO还不是那么彻底,并没有把那些内置验证方法整成protected/private,看了源代码之后,替换的方法很简单,在引用jQuery Validation的源码之后,再这样替换:

$.validator.methods.date = function (value, element) 
{ 
// Date.parse函数源自另外一个处理日期的库 
return this.optional(element) || Date.parse(value) != null; 
};

此外替换默认的message,也可以用同样的办法,比如:
$.validator.messages.date = "hey, you entered an invalid date"

当然,处理messages有其他支持的更好的办法,这在jQuery Validation的全球化和本地化的说明中有提及。
Javascript 相关文章推荐
两个DIV等高的JS的实现代码
Dec 23 Javascript
一个简单的js动画效果代码
Jul 20 Javascript
js 与 php 通过json数据进行通讯示例
Mar 26 Javascript
jquery文本框中的事件应用以输入邮箱为例
May 06 Javascript
jQuery给指定的table动态添加删除行的操作方法
Oct 12 Javascript
Web制作验证码功能实例代码
Jun 19 Javascript
原生JS实现循环Nodelist Dom列表的4种方式示例
Feb 11 Javascript
vue生成token并保存到本地存储中
Jul 17 Javascript
JavaScript多态与封装实例分析
Jul 27 Javascript
vuejs中监听窗口关闭和窗口刷新事件的方法
Sep 21 Javascript
如何安装控制器JavaScript生成插件详解
Oct 21 Javascript
解决Vue-cli3没有vue.config.js文件夹及配置vue项目域名的问题
Dec 04 Vue.js
利用jquery的获取JS文件中的字符串内容
Feb 14 #Javascript
js 金额文本框实现代码
Feb 14 #Javascript
jQuery UI Autocomplete 体验分享
Feb 14 #Javascript
JavaScript/jQuery 表单美化插件小结
Feb 14 #Javascript
Firefox/Chrome/Safari的中可直接使用$/$$函数进行调试
Feb 13 #Javascript
情人节之礼 js项链效果
Feb 13 #Javascript
jQuery.getScript加载同域JS的代码
Feb 13 #Javascript
You might like
php中删除数组的第一个元素和最后一个元素的函数
2015/03/07 PHP
PHP将进程作为守护进程的方法
2015/03/19 PHP
新浪微博OAuth认证和储存的主要过程详解
2015/03/27 PHP
Apache启动报错No space left on device: AH00023该怎么解决
2015/10/16 PHP
php基于自定义函数记录log日志方法
2017/07/21 PHP
JavaScript 变量命名规则
2009/09/23 Javascript
玩转jQuery按钮 请告诉我你最喜欢哪些?
2012/01/08 Javascript
jQuery学习笔记 操作jQuery对象 文档处理
2012/09/19 Javascript
js获取电脑分辨率的思路及操作
2013/11/22 Javascript
jQuery实用函数用法总结
2014/08/29 Javascript
HTML,CSS,JavaScript速查表推荐
2014/12/02 Javascript
jQuery插件实现控制网页元素动态居中显示
2015/03/24 Javascript
JS实现动态增加和删除li标签行的实例代码
2016/10/16 Javascript
jquery uploadify隐藏上传进度的实现方法
2017/02/06 Javascript
js记录点击某个按钮的次数-刷新次数为初始状态的实例
2017/02/15 Javascript
javascript实现的图片预览功能
2017/03/25 Javascript
js阻止默认右键的下拉菜单方法
2018/01/02 Javascript
vue 路由嵌套高亮问题的解决方法
2018/05/17 Javascript
对angular4子路由&amp;辅助路由详解
2018/10/09 Javascript
ES6学习笔记之字符串、数组、对象、函数新增知识点实例分析
2020/01/22 Javascript
[02:36]DOTA2亚洲邀请赛小组赛精彩集锦:EE凭借法力虚空拿下4杀
2017/03/30 DOTA
Python 冒泡,选择,插入排序使用实例
2015/02/05 Python
使用11行Python代码盗取了室友的U盘内容
2018/10/23 Python
PyQt5 QListWidget选择多项并返回的实例
2019/06/17 Python
PyQt5 窗口切换与自定义对话框的实例
2019/06/20 Python
python使用socket实现的传输demo示例【基于TCP协议】
2019/09/24 Python
python2 对excel表格操作完整示例
2020/02/23 Python
python3.6使用SMTP协议发送邮件
2020/05/20 Python
Python自动化测试中yaml文件读取操作
2020/08/20 Python
Python实现区域填充的示例代码
2021/02/03 Python
萌新的HTML5 入门指南
2020/11/06 HTML / CSS
服装设计专业自荐信
2014/06/17 职场文书
六一儿童节开幕词
2015/01/29 职场文书
三峡大坝导游词
2015/01/31 职场文书
在职证明范本
2015/06/15 职场文书
详解Redis的三种常用的缓存读写策略步骤
2022/05/06 Redis