html表单name相同,jQueryValidate验证表单时多个name相同
的元素只验。。。
下⾯搜集了五种⽅法,主要还是前两个提供了解决⽅案,第三种需要修改jQuery源码:
修复jquery.validate插件中name属性相同(如name='a[]‘)时验证的bug
通过查询资料,到⼀个解决⽅案:
具体内容为
$(function () {
if ($.validator) {
jquery源码在线//fix: when several input elements shares the same name, but has
$.validator.prototype.elements = function () {
var validator = this,
rulesCache = {};
// select all valid inputs inside the form (no submit or reset buttons)
return $([]).add(this.currentForm.elements)
.filter(":input")
.not(":submit, :reset, :image, [disabled]")
.not(this.settings.ignore)
.filter(function () {
var elementIdentification = this.id || this.name;
!elementIdentification && validator.settings.debug && sole && ("%o has no id nor name assigned", this);
// select only the first element for each name, and only those with rules specified
if (elementIdentification in rulesCache || !validator.objectLength($(this).rules()))
return false;
rulesCache[elementIdentification] = true;
return true;
});
};
}
});
在页⾯上引⼊以上代码,然后给相关节点加上id属性,当name属性相同时候会以id属性来验证
-------------------------------------------------------------------------------------------
$(function(){
$("#myform").validate();
$("[name=field]").each(function(){
$(this).rules("add", {
required: true,
email: true,
messages: {
required: "Specify a valid email"
}
});
});
});
----------------------------------------------------------------------------------
jquery.validate.js 相同name的多个元素只能验证第⼀个元素的解决办法
动态⽣成的相同name的元素验证只会取第⼀个.
很恼⽕的问题.只有将jquery.validate.js中的对相同name的元素判断注释掉.
但是不知道会不会引起其他地⽅的BUG
希望以后jquery.validate.js能做针对元素ID进⾏验证⽽不仅仅针对元素name验证.
⽅法:
将484⾏的代码注释掉即可
// select only the first element for each name, and only those with rules specified if ( this.name in rulesCache || !validator.objectLength($(this).rules()) )
{
return false;
}
注释成
// select only the first element for each name, and only those with rules specified /*if ( this.name in rulesCache || !validator.objectLength($(this).rules()) )
{
return false;
}
*/
-----------------------------------------------------------------------------------------------------------------------------------------
$(document).ready(function(){
$('#contact-form').validate();
$(":text").each( function(){
$(this).rules( "add", {
})
});
});
Submit
Cancel
这个表单的input 是随机⽣成的,所以name都是相同的,我现在要⽤jquery.validate.js来验证输⼊,现在只校验了第⼀id=‘a' 的,怎么让我验证所有的?
你这么写其实是添加验证成功的了,验证会被执⾏,只是submit的时候不是你想要的效果。
你可以试试,输⼊第⼀个框后,在第⼆个框⾥点⼀下不输⼊再点到第三个框。
可以看到验证的逻辑被执⾏了。
分析⼀下原因:
jquery.validate这个插件在⽣成rules的时候是按name来⽣成的,也就是说,你的表单其实只添加了⼀条验证rule:就是对name=test_a 的字段做⾮空和最⼩长度验证。
当输⼊框失去焦点时会触发这条规则,因为每个input的name都是test_a,可以命中rules中的规则
当submit的时候,同样会调⽤{'test_a': { required:true, minlength: 2}}这条规则, 只不过这条规则会被通过,因为已经有⼀个test_a字段达到了规则的要求。
追问
那怎么实现submit的时候全部校验呢?
回答
修改input的name, 动态⽣成不同的name
追问
我使⽤class的⽅式还是只检验⼀个啊?求解
回答
嗯,我也试了,是不⾏。所以建议修改name, 或者不⽤jq的插件
---------------------------------------------------------------------------------------------------------------------------------------------
function validate()
{
var result=true;
$("input[name='你定义的name']").each(
function(){
if($(this).val()=="")
{
alert("请输⼊");
return;
}
}
);
return result;
}
以上所述是⼩编给⼤家介绍的jQuery Validate验证表单时多个name相同的元素只验证第⼀个的问题,希望对⼤家有所帮助,如果⼤家有任何疑问请给我留⾔,⼩编会及时回复⼤家的。在此也⾮常感谢⼤家对脚本之家⽹站的⽀持!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论