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

时间:2014-02-19 16:43:49

标签: jquery jquery-validate

我设法使用jQuery Validate插件和this workaroundquoted 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"
}

1 个答案:

答案 0 :(得分:1)

引用OP

  

“我设法使用jQuery Validate插件验证具有相同名称的多个表单字段,例如first_name[],并且此解决方法   (quoted here)。“

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

  • 您必须确保在更新时不要覆盖它。

  • 您为下一个参与该项目的人制造了混淆。

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

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

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

引用OP

  

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

     

为什么会这样?“

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

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

但是,你根本不需要做任何这些。该插件旨在处理作为数组的一部分的字段name ... "field[1]""field[2]"等等。

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

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