我将从我的问题示例开始:
<form>
<input name="course[0][name]" />
<input name="course[0][type]" />
<input name="course[1][name]" />
<input name="course[1][type]" />
...
...
</form>
obs:这当然是简化的。
那么......我怎么能验证那些因为我无法预测这个名字?有没有办法使用正则表达式或其他东西?乌托邦的例子:
rules: {
/course\[([0-9]+)\]\[name\]/: {
required: true
}
}
我在文档中找不到解决方案,因为它有点令人困惑。谢谢(:
答案 0 :(得分:1)
所以,我做了一些搜索,看起来规则对象中的键是简单的jQuery选择器。根据{{3}},可以使用正则表达式过滤器。在这两者之间,你的正则表达式应该可行。
...您不需要预测它们,您的服务器已经知道它们。只需将该数字输出到脚本标记然后循环。哎呀,你甚至可以为你安装服务器。
如果这不是一个选项,那么你可以使用jQuery:
var rules = {
// simple rule, converted to {required:true}
name: "required",
// compound rule
email: {
required: true,
email: true
}
// whatever
}
// obviously, for just required, there are easier ways
var checkRules = {required:true};
$('#form-id input').each(function(i, elem)
{
/check\[\d\]\[(name|type)\]/.test(elem.name)
rules[elem.name] = checkRules
});
答案 1 :(得分:1)
作为替代方案,你可以做这样的事情
$.validator.addClassRules({
inputName: {
required: true,
minLength: 5
},
inputType: {
required: true,
remote: "remoteurl"
}
});
<input name="course[0][name]" class="inputName"/>
<input name="course[0][type]" class="inputType"/>
答案 2 :(得分:0)
更多解决方法:默认情况下,您可以在所需的字段上指定名为required
的类。
另一种选择是以编程方式填写rules
选项(this gist中的完整代码):
假设一个带有以下正文的简单示例HTML:
<body>
<form id="example">
<input name="course[0][name]" />
<input name="course[0][type]" />
<input name="course[1][name]" />
<input name="course[1][type]" />
<input type="submit" name="some_name" value="Go" id="some_name">
</form>
</body>
通过filter确定匹配元素的相应javascript:
$(document).ready(function(){
var options = { rules : {} }
// put your regex in here ...
var courses = $('input').filter(function(){
return this.name.match(/course\[([0-9]+)\]\[name\]/);
});
for (var i = courses.length - 1; i >= 0; i--){
options["rules"][courses[i].name] = { required : true };
};
$("#example").validate(options);
});