修改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 相关文章推荐
YUI 读码日记之 YAHOO.util.Dom - Part.1
Mar 22 Javascript
jQuery数组处理代码详解(含实例演示)
Feb 03 Javascript
js document.write()使用介绍
Feb 21 Javascript
document.addEventListener使用介绍
Mar 07 Javascript
JavaScript框架(iframe)操作总结
Apr 16 Javascript
JavaScript DOM节点添加示例
Jul 16 Javascript
深入分析jsonp协议原理
Sep 26 Javascript
Angularjs 制作购物车功能实例代码
Sep 14 Javascript
微信小程序Server端环境配置详解(SSL, Nginx HTTPS,TLS 1.2 升级)
Jan 12 Javascript
jQuery元素选择器实例代码
Feb 06 Javascript
jQuery实现单击按钮遮罩弹出对话框效果(1)
Feb 20 Javascript
vue基于element的区间选择组件
Sep 07 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任务
2017/02/21 PHP
laravel5.0在linux下解决.htaccess无效和去除index.php的问题
2019/10/16 PHP
laravel5.6中的外键约束示例
2019/10/23 PHP
刷新时清空文本框内容的js代码
2007/04/23 Javascript
jQuery提交表单ajax查询实例代码
2012/10/07 Javascript
JS中判断JSON数据是否存在某字段的方法
2014/03/07 Javascript
jQuery实现行文字链接提示效果的方法
2015/03/10 Javascript
基于jQuery实现的无刷新表格分页实例
2016/02/17 Javascript
JavaScript开发者必备的10个Sublime Text插件
2016/02/27 Javascript
全面了解JS中的匿名函数
2016/06/29 Javascript
在vue里面设置全局变量或数据的方法
2018/03/09 Javascript
JavaScript数组及常见操作方法小结
2019/11/13 Javascript
Python检测一个对象是否为字符串类的方法
2015/05/21 Python
Python实现打印螺旋矩阵功能的方法
2017/11/21 Python
Python 记录日志的灵活性和可配置性介绍
2018/02/27 Python
numpy.delete删除一列或多列的方法
2018/04/03 Python
Python OpenCV处理图像之图像直方图和反向投影
2018/07/10 Python
python复制列表时[:]和[::]之间有什么区别
2018/10/16 Python
python构建指数平滑预测模型示例
2019/11/21 Python
python单例设计模式实现解析
2020/01/07 Python
pycharm运行程序时看不到任何结果显示的解决
2020/02/21 Python
无惧面试,带你搞懂python 装饰器
2020/08/17 Python
python安装mysql的依赖包mysql-python操作
2021/01/01 Python
意大利专业化妆品品牌:KIKO MILANO
2017/02/01 全球购物
New Era英国官网:美国棒球帽品牌
2018/03/21 全球购物
荷兰街头时尚之家:Funkie House
2019/03/18 全球购物
SportsDirect.com新加坡:英国第一体育零售商
2019/03/30 全球购物
毕业生自我鉴定范文
2013/11/08 职场文书
简历里的自我评价范文
2014/02/24 职场文书
信息总监管理职责范本
2014/03/08 职场文书
园林系毕业生求职信
2014/06/23 职场文书
新闻发布会活动策划方案
2014/09/15 职场文书
财务工作失职检讨书
2014/11/21 职场文书
现实表现材料范文
2014/12/23 职场文书
mysql获取指定时间段中所有日期或月份的语句(不设存储过程,不加表)
2021/06/18 MySQL
微前端qiankun改造日渐庞大的项目教程
2022/06/21 Javascript