我设法使用jQuery Validate插件和this workaround(quoted here)验证具有相同名称的多个表单字段,例如first_name[]
。
但是,错误消息仅针对字段的第一个实例显示,而不是下一个实例。
为什么?
为了记录,上面链接中提供的解决方案包括编辑jquery.validate.js并将checkForm函数内容更改为:
checkForm: function() {
this.prepareForm();
for ( var i = 0, elements = (this.currentElements = this.elements()); elements[i]; i++ ) {
if (this.findByName( elements[i].name ).length != undefined && this.findByName( elements[i].name ).length > 1) {
for (var cnt = 0; cnt < this.findByName( elements[i].name ).length; cnt++) {
this.check( this.findByName( elements[i].name )[cnt] );
}
} else {
this.check( elements[i] );
}
}
return this.valid();
}
然后在调用插件时使用这种参数:
rules: {
"field_name[]": "required"
}
答案 0 :(得分:1)
引用OP :
“我设法使用jQuery Validate插件验证具有相同名称的多个表单字段,例如
first_name[]
,并且此解决方法 (quoted here)。“
我强烈建议不要编辑任何插件的源代码。
您必须确保在更新时不要覆盖它。
您为下一个参与该项目的人制造了混淆。
您可能会引入任意数量的未知错误。
这是一款非常受欢迎且经过全面测试的插件。编辑源代码并忘记所有这些......你也可以编写自己的插件。
此外,你引用的黑客已经超过三年......你怎么知道它仍然应该在最新版本的插件上正常工作(如果它能够正常工作)?
引用OP :
“但是,错误消息仅针对字段的第一个实例显示,而不是下一个实例。
为什么会这样?“
当你有多个字段共享相同的name
时,这就是这个插件正好发生的事情......只识别第一个实例。没有解决方法。
该插件旨在通过其name
属性跟踪表单输入。我不知道有什么黑客可以解决这个问题,因为你仍然需要跟踪所有内容而不重复。
但是,你根本不需要做任何这些。该插件旨在处理作为数组的一部分的字段name
... "field[1]"
,"field[2]"
等等。
如果您的表单是静态的,只需创建唯一的字段名称。
如果您的表单是动态的,请使用增量计数器正确创建数组索引,以便每个字段都以唯一的name
结尾。