【问题标题】:Validating multiple form fields with identical names using jQuery Validate plugin使用 jQuery Validate 插件验证具有相同名称的多个表单字段
【发布时间】:2014-03-20 03:48:07
【问题描述】:

我设法使用 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"
}

【问题讨论】:

    标签: jquery jquery-validate


    【解决方案1】:

    引用OP

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

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

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

    • 您为下一个从事该项目的人制造了混乱。

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

    这是一个非常流行且经过全面测试的插件。编辑源代码并忘记所有这些......您不妨编写自己的插件。

    此外,您引用的 hack 已有三年多的历史了……您怎么知道它仍然应该在最新版本的插件上正常工作(如果它曾经工作过)?

    引用OP

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

    这是为什么呢?”

    当您有多个共享相同name 的字段时,此插件会发生这种情况...仅识别第一个实例。没有解决方法。

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-09-10
      • 1970-01-01
      • 1970-01-01
      • 2022-01-09
      • 2014-05-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多