【问题标题】:JQuery validate - Assigning Rules as variableJQuery validate - 将规则分配为变量
【发布时间】:2013-10-22 09:31:24
【问题描述】:

我以以下格式指定规则

rules :{ 
col1: { 
required: true
},
col2: {
maxlength: 50
}
}

完全可以正常工作。是否可以将其分配给变量并将其添加到如下格式的规则中

var testRules = "{ col1: { required: true},col2: {maxlength: 50}}";

rules : testRules

上面的代码没有工作,在 jquery 文件中出现异常。

如果可能的话,这样做。什么是正确的方法或者我可以实现类似的东西?

谢谢

【问题讨论】:

    标签: jquery jquery-validate


    【解决方案1】:

    您的代码:

    var testRules = "{ col1: { required: true},col2: {maxlength: 50}}";
    

    去掉引号就可以了。

    var testRules = { col1: { required: true},col2: {maxlength: 50}};
    

    演示:http://jsfiddle.net/mNtcL/


    就我的示例而言,这是基本的起始代码:

    HTML:

    <input type="text" name="field_1" />
    <input type="text" name="field_2" />
    <input type="text" name="field_3" />
    

    JS:

    $('#myForm').validate({
        rules: {
            field_1: {
                required: true,
                number: true
            },
            field_2: {
                required: true,
                number: true
            },
            field_3: {
                required: true,
                number: true
            }
        }
    });
    

    演示http://jsfiddle.net/rq5ra/


    是的,您可以提取规则组并将它们组合成公共变量。

    var ruleSet1 = {
            required: true,
            number: true
        };
    
    $('#myForm').validate({
        rules: {
            field_1: ruleSet1,
            field_2: ruleSet1,
            field_3: ruleSet1
        }
    });
    

    演示http://jsfiddle.net/rq5ra/4/


    您还可以使用.extend() 以无数种方式重新组合它们。

    var ruleSet_default = {
            required: true,
            number: true
        };
    
    var ruleSet1 = {
            max: 99
        };
    $.extend(ruleSet1, ruleSet_default); // combines defaults into set 1
    
    var ruleSet2 = {
            min: 3
        };
    $.extend(ruleSet2, ruleSet_default); // combines defaults into set 2
    
    
    $('#myForm').validate({
        rules: {
            field_1: ruleSet2,
            field_2: ruleSet_default,
            field_3: ruleSet1
        }
    });
    

    最终结果:

    • field_1 是一个不小于 3 的必填数字。
    • field_2 只是一个必填数字。
    • field_3 是不大于 99 的必填数字。

    演示http://jsfiddle.net/rq5ra/5/

    也可以see this answer 了解更多应用规则的方法。

    【讨论】:

    • 不能要求更多@Sparky。感谢您的出色回答:)
    • 快速提问我有两条规则 var testRules1 = { col1: { required: true},col2: {maxlength: 10}}; var testRules2 = { col1: { required: true},col2: {maxlength: 50}};在规则中我如何动态应用 tat ?我需要根据我将通过“1”或“2”并附加到 testRules 规则的条件申请:testRules+1 //Didnt work
    • @Peru,动态更改规则的唯一方法是使用.rules() 方法。请参阅 .rules('add') 以覆盖和 .rules('remove') 在文档中。
    【解决方案2】:

    嗯,我能想到的唯一方法是使用eval(),例如:

    var testRules = "{ col1: { required: true},col2: {maxlength: 50} }";
    var obj=eval("("+testRules+")");
    console.log( obj );
    

    【讨论】:

    • 不需要eval()。删除引号使其工作。见:jsfiddle.net/mNtcL
    • @Sparky +1 为此..,是的,绝对是... :),我想知道为什么我不能得到那么简单的东西.. :(
    • @Sudhir 快速提问我有两条规则 var testRules1 = { col1: { required: true},col2: {maxlength: 10}}; var testRules2 = { col1: { required: true},col2: {maxlength: 50}};在规则中我如何动态应用 tat ?我需要根据我将通过“1”或“2”并附加到 testRules 规则的条件申请:testRules+1 //Didnt work
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多