修改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 相关文章推荐
WebGame《逆转裁判》完整版 代码下载(1月24日更新)
Jan 29 Javascript
jquery获取下拉列表的值为null的解决方法
Mar 18 Javascript
Javascript 实现的数独解题算法网页实例
Oct 15 Javascript
vue.js表格组件开发的实例详解
Oct 12 Javascript
Node.js开启Https的实践详解
Oct 25 Javascript
ES6深入理解之“let”能替代”var“吗?
Jun 28 Javascript
vue如何使用 Slot 分发内容实例详解
Sep 05 Javascript
js仿微信抢红包功能
Sep 25 Javascript
微信小程序Getuserinfo解决方案图解
Aug 24 Javascript
Vue 指令实现按钮级别权限管理功能
Apr 23 Javascript
javascript的delete运算符知识点总结
Nov 19 Javascript
AJAX实现指定部分页面刷新效果
Oct 16 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
图象函数中的中文显示
2006/10/09 PHP
如何获知PHP程序占用多少内存(memory_get_usage)
2012/09/23 PHP
php写app用的框架整理
2019/09/29 PHP
HTML 自动伸缩的表格Table js实现
2009/04/01 Javascript
jquery 检测元素是否存在的实例代码
2013/11/19 Javascript
Javascript获取CSS伪元素属性的实现代码
2014/09/28 Javascript
jQuery遍历json中多个map的方法
2015/02/12 Javascript
Java Mybatis框架入门基础教程
2015/09/21 Javascript
BootStrap 超链接变按钮的实现方法
2016/09/25 Javascript
详解AngularJS中$filter过滤器使用(自定义过滤器)
2017/02/04 Javascript
JS传播事件、取消事件默认行为、阻止事件传播详解
2017/08/14 Javascript
vue 系列——vue2-webpack2框架搭建踩坑之路
2017/12/22 Javascript
vue router 用户登陆功能的实例代码
2019/04/24 Javascript
Vue使用Proxy监听所有接口状态的方法实现
2019/06/07 Javascript
原生JS实现留言板
2020/03/26 Javascript
[49:35]2018DOTA2亚洲邀请赛3月30日 小组赛A组 KG VS TNC
2018/03/31 DOTA
使用pyecharts无法import Bar的解决方案
2020/04/23 Python
python实现决策树C4.5算法详解(在ID3基础上改进)
2017/05/31 Python
python实现批量图片格式转换
2020/06/16 Python
解决python3中cv2读取中文路径的问题
2018/12/05 Python
python实现文件的备份流程详解
2019/06/18 Python
对python 调用类属性的方法详解
2019/07/02 Python
python如果快速判断数字奇数偶数
2019/11/13 Python
Python 解决火狐浏览器不弹出下载框直接下载的问题
2020/03/09 Python
在django admin详情表单显示中添加自定义控件的实现
2020/03/11 Python
什么是python的自省
2020/06/21 Python
现代绅士日常奢侈品:Todd Snyder
2019/12/13 全球购物
Ariat英国官网:为世界顶级马术运动员制造最优质的鞋类和服装
2020/02/14 全球购物
Java基础面试题
2012/11/02 面试题
《夸父追日》教学反思
2014/02/26 职场文书
公司年会策划方案
2014/05/17 职场文书
爱心捐助倡议书
2014/05/19 职场文书
大学活动总结模板
2014/07/10 职场文书
社区志愿者服务心得体会
2016/01/22 职场文书
用JS创建一个录屏功能
2021/11/11 Javascript
JavaScript实现九宫格拖拽效果
2022/06/28 Javascript