jquery.validate 怎么验证 同名的多个 input 呢?我下面这段代码有什么问题?

2025-03-10 11:18:27
推荐回答(2个)
回答1:

JQuery不支持多个input的name属性相同,比较恶心的方式:先把name设置成不同,在提交的时候再修改name属性
$(document).ready(function () {
$('#main').validate();
$('#main input[type=submit]').click(function() {
if ($('#main').valid()) {
$('#main input[name^=foo_]').each(function() {
$(this).attr('name', 'foo');
});
return true;
}
return false;
});
});







参考
http://jsfiddle.net/xaFZj/41/

回答2:

你这么写其实是添加验证成功的了,验证会被执行,只是submit的时候不是你想要的效果。

你可以试试,输入第一个框后,在第二个框里点一下不输入再点到第三个框。
可以看到验证的逻辑被执行了。

分析一下原因:
jquery.validate 这个插件在生成rules的时候是按name来生成的,也就是说,你的表单其实只添加了一条验证rule:就是对name=test_a的字段做非空和最小长度验证。

当输入框失去焦点时会触发这条规则,因为每个input的name都是test_a,可以命中rules中的规则

当submit的时候,同样会调用{'test_a': { required:true, minlength: 2}}这条规则, 只不过这条规则会被通过,因为已经有一个test_a字段达到了规则的要求。