修改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 相关文章推荐
javascript实现划词标记+划词搜索功能
Mar 06 Javascript
Javascript select控件操作大全(新增、修改、删除、选中、清空、判断存在等)
Dec 19 Javascript
基于jQuery的投票系统显示结果插件
Aug 12 Javascript
用JS实现一个TreeMenu效果分享
Aug 28 Javascript
JS代码实现根据时间变换页面背景效果
Jun 16 Javascript
BootStrap glyphicon图标无法显示的解决方法
Sep 06 Javascript
深入理解javascript的getTime()方法
Feb 16 Javascript
js实现瀑布流效果(自动生成新的内容)
Mar 16 Javascript
vue项目中全局引入1个.scss文件的问题解决
Aug 01 Javascript
构建Vue大型应用的10个最佳实践(小结)
Nov 07 Javascript
Vue打包部署到Nginx时,css样式不生效的解决方式
Aug 03 Javascript
mapboxgl实现带箭头轨迹线的代码
Jan 04 Javascript
利用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计划任务之关闭浏览器后仍然继续执行的函数
2010/07/22 PHP
zend framework配置操作数据库实例分析
2012/12/06 PHP
解析php中mysql_connect与mysql_pconncet的区别详解
2013/05/15 PHP
php利用腾讯ip分享计划获取地理位置示例分享
2014/01/20 PHP
在Mac OS下搭建LNMP开发环境的步骤详解
2017/03/10 PHP
起点页面传值js,有空研究学习下
2010/01/25 Javascript
ExtJS 2.0 GridPanel基本表格简明教程
2010/05/25 Javascript
jquery获取焦点和失去焦点事件代码
2013/04/21 Javascript
在javascript中随机数 math random如何生成指定范围数值的随机数
2015/10/21 Javascript
js获取图片宽高的方法
2015/11/25 Javascript
AngularJS使用ng-inlude指令加载页面失败的原因与解决方法
2017/01/19 Javascript
浅谈js中用$(#ID)来作为选择器的问题(id重复的时候)
2017/02/14 Javascript
JS变量中有var定义和无var定义的区别以及es6中let命令和const命令
2017/02/19 Javascript
微信小程序 实现列表项滑动显示删除按钮的功能
2017/04/13 Javascript
JS 学习总结之正则表达式的懒惰性和贪婪性
2017/07/03 Javascript
JavaScript数据结构之双向链表和双向循环链表的实现
2017/11/28 Javascript
H5+C3+JS实现双人对战五子棋游戏(UI篇)
2020/05/28 Javascript
Vue中CSS动画原理的实现
2019/02/13 Javascript
jQuery层叠选择器用法实例分析
2019/06/28 jQuery
vue 关闭浏览器窗口的时候,清空localStorage的数据示例
2019/11/06 Javascript
Angular8 简单表单验证的实现示例
2020/06/03 Javascript
[51:17]Mineski vs Secret 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.22
2019/09/05 DOTA
python异常和文件处理机制详解
2016/07/19 Python
Python正则替换字符串函数re.sub用法示例
2017/01/19 Python
Python获取网段内ping通IP的方法
2019/01/31 Python
TFRecord格式存储数据与队列读取实例
2020/01/21 Python
python数据库编程 Mysql实现通讯录
2020/03/27 Python
python 制作磁力搜索工具
2021/03/04 Python
HTML5中如何显示视频呢 HTML5视频播放demo
2013/06/08 HTML / CSS
htmlentities() 和 htmlspecialchars()有什么区别
2015/07/01 面试题
初中生学习生活的自我评价
2013/11/20 职场文书
回门宴新郎答谢词
2014/01/12 职场文书
工地例会施工汇报材料
2014/08/22 职场文书
依法行政工作汇报
2014/10/28 职场文书
手把手教你实现PyTorch的MNIST数据集
2021/06/28 Python
Flask response响应的具体使用
2021/07/15 Python