JQuery validate验证带有readonly,disabled等属性的标签

JQuery validate 插件在验证/校验 表单的时候,是不校验带有readonly,disabled,:reset(type= reset),:submit,:image 等标签的,也就是验证的时候,会过滤掉这些标签的。那如何 让 JQuery validate插件去验证这些标签呢?

JQuery validate Core

首先,看一下JQuery validate 源码中的 elements方法(提取验证元素的方法):

// 图片字太小了,我直接把代码粘贴出来了
 elements: function () {
 var b = this,
 c = {
 };
 /* *
*我们可以看到此处从input, select, textarea这些标签中,

*以次过滤了 :submit, :reset, :image 这些类型的标签。

*又过滤了带有[disabled], [readonly]属性的标签

*最后又过滤了 我们在 ignore中设置的标签
*/

 return a(this.currentForm).find('input, select, textarea').not(':submit, :reset, :image, [disabled], [readonly]').not(this.settings.ignore).filter(function () {
   return !this.name && b.settings.debug && window.console && console.error('%o has no name assigned', this),
   this.name in c || !b.objectLength(a(this).rules()) ? !1 : (c[this.name] = !0, !0)
 })
},

JQuery validate 源码中的 elements方法

所以,我们在使用的时候,会发现没有验证带有 readonly等属性的标签,尽管我们已经在 标签中添加了 required,maxlength 等属性。

解决方案(仅限 readonly,disabled等属性)

我们不要直接在标签中加入 readonly 等属性,我们使用JS事件,动态处理。

dailyAdd_user绑定 focusin事件,委托在daily_form上, 当焦点落在输入框上时,我们添加上readonly属性设置为true,使用户无法输入,移除时,设置为false。这样validate插件就可以验证了。

// 解决validate 与 readonly 冲突问题
$('#daily_form').on("focusin", "#dailyAdd_user", function() {
       $(this).prop('readonly', true);  
});

$('#daily_form').on("focusout", "#dailyAdd_user", function() {
   $(this).prop('readonly', false); 
});

验证效果

动态设置readonly的值

参考博文

How can I enable jquery validation on readonly fields? : http://stackoverflow.com/questions/26838839/how-can-i-enable-jquery-validation-on-readonly-fields

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值