【发布时间】:2013-03-12 13:44:57
【问题描述】:
查看这里的文档: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[]' 设置规则的建议方法不适用于验证插件。请参阅下面的答案和 cmets。)
但是当我尝试添加其他文件类型时没有验证错误...有什么建议吗?
【问题讨论】:
-
据我记得,
jQuery.validate不支持验证具有相同名称的多个字段,即使您删除括号之间的数字(您可以在发送到大多数后端语言)。尝试使用$('input').rules("add", { required:true, extension: "pdf|docx?" }) -
谢谢!输入字段是动态添加的,因此我无法使用您的建议,因为输入不在 DOM 中。此外,我使用数组键来跟踪表单中的许多内容,所以我不能只设置
name="field[]"这将与验证一起使用...... -
对每个动态生成的字段使用
.rules("add", {})。没有其他选项不涉及更丑陋的黑客攻击。 -
谢谢。有效。添加为您的答案,我会接受。我的解决方案是为每个动态添加的输入字段添加规则:
$('input[name="field['+key+']"]').rules("add", { required:true, extension: "pdf|doc|docx" });(key是我的数字变量...)