使用未知数组键进行 jQuery 验证

标签 jquery jquery-validate

查看此处的文档:http://docs.jquery.com/Plugins/Validation/Reference#Fields_with_complex_names_.28brackets.2C_dots.29 将规则附加到输入数组的语法如下:

rules: {
"user[email]": "email",

但是在我的例子中,数组键是数字值并且可以具有任何值,但我仍然想将规则附加到字段。我使用 jQuery 动态添加输入字段(key 是一个全局变量):

 $('a#addfield').click(function(e)
 {
    e.preventDefault();
    var data = '<p><input type="file" name="field['+key+']"></p>';
    $('div#inputcontainer').append(data);
 });

HTML 输出示例:

<p><input name="field[19]" type="file"></p>
<p><input name="field[22]" type="file"></p>
<p><input name="field[25]" type="file"></p>

我尝试定义这样的规则:

rules: 
{
   'field[]': {
         required: true,
         extension: "pdf|doc|docx"
    }
}

(取自此答案:jquery validate add rules for an array input 编辑:这种使用'field[]'设置规则的建议方法不适用于验证插件。请参阅答案以及下面的评论。)

但是当我尝试添加其他文件类型时没有验证错误...有什么建议吗?

最佳答案

您可以申请.rules("add", rules)对于每个生成的元素:

$(element).rules("add", { required:true, extension: "pdf|docx?" });
<小时/>

jQuery.validate 确实提供了一种通过以下方式验证具有相同名称的元素(foo[]foo[N])的方法:在表单上设置的规则(至少到 v1.11)。

还有一些其他方法可以添加动态规则,例如,要在不调用 .rules('add') 的情况下添加必需的检查,您只需使用 class="required" 在元素中,验证插件应该动态地选择它。

但是,没有与 extension 选项等效的内置选项,因此您必须向所有输入添加一个类,并使用 addClassRules 创建您自己的类规则。 。这最终会与 HTML 和可能的 CSS 混合一些行为。

<小时/>

请注意 future 的读者:.rules('add')addClassRules 不适用于重复名称(例如 foo[]),但如果名称不完全相同(例如 foo[index]),这就是 OP 的情况,这些确实可以工作。

我相信具有完全相同名称的输入对于这个问题来说是偏离主题的,但是对于这些,您必须使用 addMethod 添加您自己的验证方法,或者在表单的提交处理程序中添加您自己的验证或尝试此 related answer .

关于使用未知数组键进行 jQuery 验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15362943/

相关文章:

javascript - jQuery Validate - 每个元素有多个规则?

asp.net-mvc - jsFiddle 中的 jQuery 不显眼的自定义适配器和方法

jquery - Bootstrap 表单验证

javascript - 在本地工作但不在线

Jquery 自动完成样式

jQuery 关闭表单验证

jquery - 根据复选框验证按钮

javascript - 除了第一次,jQuery 对象永远不会改变

javascript - .val() 在带有 [] 的字段名称上

javascript - 如何切换外部 CSS 文件?