修改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当onmousedown、onmouseup、onclick同时应用于同一个标签节点Element
Jan 05 Javascript
js中小数转换整数的方法
Jan 26 Javascript
js实现从中间开始往上下展开网页窗口的方法
Mar 02 Javascript
浅析JS运动
Dec 28 Javascript
jQuery防止重复绑定事件的解决方法
May 14 Javascript
BootStrap无限级分类(无限极分类封装版)
Aug 26 Javascript
jquery Form轻松实现文件上传
May 24 jQuery
详解js跨域请求的两种方式,支持post请求
May 05 Javascript
vue 中引用gojs绘制E-R图的方法示例
Aug 24 Javascript
微信小程序实现搜索功能并跳转搜索结果页面
May 18 Javascript
vue监听用户输入和点击功能
Sep 27 Javascript
详解Vue的组件中data选项为什么必须是函数
Aug 17 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
回答PHPCHINA上的几个问题:URL映射
2007/02/14 PHP
php实现网站插件机制的方法
2009/11/10 PHP
解析在PHP中使用全局变量的几种方法
2013/06/24 PHP
ThinkPHP使用UTFWry地址库进行IP定位实例
2014/04/01 PHP
php查看当前Session的ID实例
2015/03/16 PHP
帝国cms目录结构分享
2015/07/06 PHP
php生成4位数字验证码的实现代码
2015/11/23 PHP
关于文本限制字数的js代码
2007/04/02 Javascript
js实现遍历含有input的table实例
2015/12/07 Javascript
实例代码详解javascript实现窗口抖动及qq窗口抖动
2016/01/04 Javascript
jquery 无限极下拉菜单的简单实例(精简浓缩版)
2016/05/31 Javascript
通过Ajax使用FormData对象无刷新上传文件方法
2016/12/08 Javascript
网站申请不到支付宝接口、微信接口,免接口收款实现方式几种解决办法
2016/12/14 Javascript
vue router demo详解
2017/10/13 Javascript
vue中路由验证和相应拦截的使用详解
2017/12/13 Javascript
详解如何优雅地在React项目中使用Redux
2017/12/28 Javascript
vue中的provide/inject的学习使用
2018/05/09 Javascript
微信小程序的线程架构【推荐】
2019/05/14 Javascript
jQuery实现简单全选框
2020/09/13 jQuery
九步学会Python装饰器
2015/05/09 Python
Python中用max()方法求最大值的介绍
2015/05/15 Python
如何用itertools解决无序排列组合的问题
2017/05/18 Python
pandas数据分组和聚合操作方法
2018/04/11 Python
Python实现堡垒机模式下远程命令执行操作示例
2019/05/09 Python
浅谈Selenium 控制浏览器的常用方法
2020/12/04 Python
英国在线电子和小工具商店:TecoBuy
2018/10/06 全球购物
C#面试题
2016/05/06 面试题
医学检验专业个人求职信范文
2013/12/04 职场文书
安全资金保障制度
2014/01/23 职场文书
先进集体事迹材料
2014/02/17 职场文书
2015年世界无烟日活动总结
2015/02/10 职场文书
2015年三好一满意工作总结
2015/07/24 职场文书
2019年公司快递收发管理制度模板
2019/11/20 职场文书
uniapp开发小程序的经验总结
2021/04/08 Javascript
python用海龟绘图写贪吃蛇游戏
2021/06/18 Python
Windows server 2022创建创建林、域树、子域的步骤
2022/06/25 Servers