Jquery验证器与二维数组

时间:2011-08-12 01:06:11

标签: javascript jquery html forms jquery-validate

我将从我的问题示例开始:

<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
    }
}

我在文档中找不到解决方案,因为它有点令人困惑。谢谢(:

3 个答案:

答案 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);
    });