使用jQuery Validate插件validation具有相同名称的多个表单字段

我设法validation具有相同名称的多个表单字段,例如first_name[] ,使用jQuery Validate插件和此解决方法 ( 此处引用 )。

但是,错误消息仅针对字段的第一个实例显示,而不是下一个实例。

这是为什么?

为了记录,上面链接中提供的解决方案包括编辑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" } 

引用OP

“我设法使用jQuery Validate插件和此解决方法( 此处引用 )validation具有相同名称的多个表单字段,例如first_name[] 。”

我强烈建议不要编辑任何插件的源代码。

  • 您必须确保在更新时永远不会覆盖它。

  • 您为下一个处理该项目的人员制造了混乱。

  • 您可能会引入任意数量的未知错误。

这是一个非常受欢迎且经过全面测试的插件。 编辑源代码并忘掉所有这些……你也可以编写自己的插件。

此外,你引用的黑客已经超过三年……你怎么知道它仍然应该在最新版本的插件上正常工作(如果它能够正常工作)?

引用OP

“但是,错误消息仅针对字段的第一个实例显示,而不是下一个实例。

这是为什么?”

当你有多个共享相同name字段时,这正是这个插件发生的事情……只识别第一个实例。 没有解决方法。

该插件旨在通过其name属性跟踪表单输入。 我不知道任何黑客会如何解决这个问题,因为你仍然需要跟踪所有内容而不重复。

但是,您根本不需要执行任何操作。 该插件旨在处理作为数组一部分的字段name"field[1]""field[2]"等是可以接受的。

  • 如果表单是静态的,只需创建唯一的字段名称。

  • 如果表单是动态的,请使用增量计数器来正确创建数组索引,以便每个字段都以唯一的name结束。