修改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 相关文章推荐
HTML node相关的一些资料整理
Jan 01 Javascript
jQuery满屏焦点图左右滚动特效代码分享
Sep 07 Javascript
jquery实现Slide Out Navigation滑出式菜单效果代码
Sep 07 Javascript
JS实现网页Div层Clone拖拽效果
Sep 26 Javascript
详解JavaScript函数
Dec 01 Javascript
基于js中的原型、继承的一些想法
Aug 10 Javascript
JS解决position:sticky的兼容性问题的方法
Oct 17 Javascript
Bootstrap实现翻页效果
Nov 27 Javascript
jQuery使用动画队列自定义动画操作示例
Jun 16 jQuery
原生JS实现$.param() 函数的方法
Aug 10 Javascript
Element UI 自定义正则表达式验证方法
Sep 04 Javascript
Vue 使用计时器实现跑马灯效果的实例代码
Jul 11 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 按指定元素值去除数组元素的实现方法
2011/11/04 PHP
PHP代码优化之成员变量获取速度对比
2014/02/28 PHP
详解php中 === 的使用
2016/10/24 PHP
PHP生成图表pChart的示例解析
2020/07/31 PHP
超级强大的表单验证
2006/06/26 Javascript
随机显示经典句子或诗歌的javascript脚本
2007/08/04 Javascript
腾讯UED 漂亮的提示信息效果代码
2011/09/12 Javascript
javaScript如何处理从java后台返回的list
2014/04/24 Javascript
jQuery函数map()和each()介绍及异同点分析
2014/11/08 Javascript
JS实现拖动滚动条评分的效果代码分享
2016/09/29 Javascript
微信公众号-获取用户信息(网页授权获取)实现步骤
2016/10/21 Javascript
JS查找字符串中出现最多的字符及个数统计
2017/02/04 Javascript
JS基于面向对象实现的多个倒计时器功能示例
2017/02/28 Javascript
完美解决浏览器跨域的几种方法(汇总)
2017/05/08 Javascript
详解Vue 非父子组件通信方法(非Vuex)
2017/05/24 Javascript
解决vue组件中使用v-for出现告警问题及v for指令介绍
2017/11/11 Javascript
jquery 输入框查找关键字并提亮颜色的实例代码
2018/01/23 jQuery
JavaScript设计模式之构造器模式(生成器模式)定义与用法实例分析
2018/07/26 Javascript
JavaScript实现单图片上传并预览功能
2019/09/30 Javascript
vue-cli —— 如何局部修改Element样式
2020/10/22 Javascript
[01:31](回顾)杀出重围,决战TI之巅
2014/07/01 DOTA
python计算程序开始到程序结束的运行时间和程序运行的CPU时间
2013/11/28 Python
python里对list中的整数求平均并排序
2014/09/12 Python
使用Python脚本对Linux服务器进行监控的教程
2015/04/02 Python
Python中单、双下划线的区别总结
2017/12/01 Python
Python设置在shell脚本中自动补全功能的方法
2018/06/25 Python
pandas通过loc生成新的列方法
2018/11/28 Python
python 通过麦克风录音 生成wav文件的方法
2019/01/09 Python
python文档字符串(函数使用说明)使用详解
2019/07/30 Python
Python lxml模块的基本使用方法分析
2019/12/21 Python
Vans澳大利亚官网:购买鞋子、服装及配件
2019/09/05 全球购物
建筑系毕业生自我鉴定
2014/01/24 职场文书
2014年小学安全工作总结
2014/12/04 职场文书
MySQL令人大跌眼镜的隐式转换
2021/08/23 MySQL
TypeScript中条件类型精读与实践记录
2021/10/05 Javascript