【问题标题】:Jquery validator vs. bidimensional arraysJquery 验证器与二维数组
【发布时间】:2011-08-12 01:06:11
【问题描述】:

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

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

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

【问题讨论】:

  • 你可以在你的代码中使用类吗?
  • 是的,我可以。但是参数不是真假的方法呢?

标签: javascript jquery html forms jquery-validate


【解决方案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】:

    所以,我做了一些搜索,看起来规则对象中的键是简单的 jQuery 选择器。根据this question,有一个可以使用的正则表达式过滤器。在两者之间,您上面的正则表达式应该可以工作。


    原意:

    ...您不需要预测它们,您的服务器已经知道它们。只需将该数字输出到脚本标签中,然后循环。哎呀,你甚至可以为你准备服务器循环。

    如果这不是一个选项,那么你可以使用 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
    });
    

    【讨论】:

    • 嗯...这应该真的有效,谢谢。但我真的希望有“更清洁”的解决方案 =/
    • 太棒了!那么我应该如何编写规则选择器?我先试试这个:$(:regex(...)):{ required: true; }
    • 我以为更像这样:var rules = { /* do something */ }; rules[':regex(name,/check\[\d\]\[(name|type)\]/)']
    【解决方案3】:

    更多解决方法:默认情况下,您可以在必填字段上指定名为 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);
        });
    

    【讨论】:

    • @hugo_leonardo,用另一种方法更新了我的帖子(包括示例代码)。
    猜你喜欢
    • 1970-01-01
    • 2015-11-20
    • 2020-01-08
    • 2017-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-03
    相关资源
    最近更新 更多