修改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 相关文章推荐
jQuery简单实现图片预加载
Apr 20 Javascript
JS控制伪元素的方法汇总
Apr 06 Javascript
基于Bootstrap实现图片轮播效果
May 22 Javascript
JS解决iframe之间通信和自适应高度的问题
Aug 24 Javascript
详解AngularJS 路由 resolve用法
Apr 24 Javascript
vue.js整合mint-ui里的轮播图实例代码
Dec 27 Javascript
Node.js创建HTTP文件服务器的使用示例
May 11 Javascript
vue cli2.0单页面title修改方法
Jun 07 Javascript
layer ui 导入文件之前传入数据的实例
Sep 23 Javascript
有关vue 开发钉钉 H5 微应用 dd.ready() 不执行问题及快速解决方案
May 09 Javascript
Vue实现图片轮播组件思路及实例解析
May 11 Javascript
前端 javascript 实现文件下载的示例
Nov 24 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
excellent!――ASCII Art(由目标图象生成ascii)
2007/02/20 PHP
php str_pad() 将字符串填充成指定长度的字符串
2010/02/23 PHP
PHP登录验证码的实现与使用方法
2016/07/07 PHP
php微信开发自定义菜单
2016/08/27 PHP
php mysql_real_escape_string addslashes及mysql绑定参数防SQL注入攻击
2016/12/23 PHP
php写app接口并返回json数据的实例(分享)
2017/05/20 PHP
PHP实现模拟http请求的方法分析
2017/12/20 PHP
TP5(thinkPHP框架)实现后台清除缓存功能示例
2019/05/29 PHP
PHP设计模式之组合模式定义与应用示例
2020/02/01 PHP
JavaScript 字符编码规则
2009/05/04 Javascript
浅谈javascript中基本包装类型
2015/06/03 Javascript
jQuery实现淡入淡出二级下拉导航菜单的方法
2015/08/28 Javascript
基于jquery实现全屏滚动效果
2015/11/26 Javascript
javascript实现的网站访问量统计代码
2015/12/20 Javascript
基于Jquery插件Uploadify实现实时显示进度条上传图片
2020/03/26 Javascript
JavaScript中Array的实用操作技巧分享
2016/09/11 Javascript
Vue中img的src属性绑定与static文件夹实例
2017/05/18 Javascript
Vue自定义事件(详解)
2017/08/19 Javascript
vue生命周期的探索
2019/04/03 Javascript
基于VUE实现简单的学生信息管理系统
2021/01/13 Vue.js
[49:08]完美世界DOTA2联赛PWL S2 LBZS vs FTD.C 第一场 11.27
2020/12/01 DOTA
python k-近邻算法实例分享
2014/06/11 Python
Python中集合类型(set)学习小结
2015/01/28 Python
python简单获取本机计算机名和IP地址的方法
2015/06/03 Python
Pytorch基本变量类型FloatTensor与Variable用法
2020/01/08 Python
使用Django实现把两个模型类的数据聚合在一起
2020/03/28 Python
Python文本文件的合并操作方法代码实例
2020/03/31 Python
Python偏函数Partial function使用方法实例详解
2020/06/17 Python
智能电子应届生求职信
2013/11/10 职场文书
优秀团支部事迹材料
2014/02/08 职场文书
爱情寄语大全
2014/04/09 职场文书
教师竞聘演讲稿
2014/05/16 职场文书
2014年团支部年度工作总结
2014/12/24 职场文书
停电调休通知
2015/04/16 职场文书
《工作是最好的修行》读后感3篇
2019/12/13 职场文书
dubbo服务整合zipkin详解
2021/07/26 Java/Android