0

我想同时使用 jquery 转发器和 jquery 验证库。这是我的验证规则:

$("#myForm").validate({
rules: {
    title: {
        required: true
    },
    subject: {
        required: true
    }
},
messages: {
    title: {
        required: "Enter title!"
    },
    subject: {
        required: "Enter subject!"
    }
},
errorElement: 'div',
errorPlacement: function (error, element) {
    var placement = $(element).data('error');
    if (placement) {
        $(placement).append(error)
    } else {
        error.insertAfter(element);
    }
},
submitHandler: function (form) {
    submitForm();
    return false;
}
});

但它不工作。因为 jquery 转发器创建输入名称,如data[0][title]、data[1][title]、data[0][subject]、data[1][subject]等。因此我的规则不能仅命名标题或主题。如何验证这些名称,例如data[*][title]data[*][subject]

4

1 回答 1

1

正如我的评论中所述,当未知时,您无法从.validate()方法中设置规则。name如果name缺少,您将无法使用此插件。)

请记住,names此插件必须使用 unique 才能运行name下面的任何技术仍然需要在每个领域都有一个独特的。

required如果需要设置简单的规则,那么您可以将它们声明为内联的data属性、HTML5 或类。 required="required", class="required", 等等,插件会自动拾取它们。

<input name="foo" required="required" ....

如果您无法更改内联 HTML,那么您可以使用.rules()方法向这些字段添加规则,只要它们在您调用.rules('add').

  1. 调用.validate()您的表单以使用您的选项初始化插件。

  2. 使用 Repeater 或任何方法创建新字段,确保所有新字段都具有唯一name属性。

  3. 调用附加到jQuery 选择器.rules('add')的 jQuery 内部,例如这些新字段上的“以”结尾。这将动态地将规则添加到以字符串结尾的所有字段....each()requiredname[subject]

    $("[name$='[subject]']").each(function() {
        $(this).rules('add', 
            required: true,
            messages: {
                required: "optional custom message"
    
        });
    });
    
于 2021-04-19T17:52:42.993 回答