【问题标题】:Setting same properties for more fields为更多字段设置相同的属性
【发布时间】:2013-02-27 11:26:10
【问题描述】:

我有两个或多个文本字段,我想对它们应用相同的属性,避免编写两次或多次相同的代码

这不起作用:

$("#form").validate({  
    rules:  
    {
    'name', 'surname':{  
        required: true,  
        minlength: 3,
        maxlength: 50   
        }
    }
});   

有什么想法吗?

【问题讨论】:

    标签: jquery jquery-validate validation


    【解决方案1】:

    这样试试

    var ruleSet1 = {
            required: true,  
            minlength: 3,
            maxlength: 50
        };
    
    $('#form').validate({
        rules: {
            field_1: ruleSet1,
            field_2: ruleSet1,
            field_3: ruleSet1
        }
    });
    

    或者像下面这样一个一个地做,

    $("#form").validate({  
        rules:  
        {
        name: { required: true },
        surname:{  
            required: true,  
            minlength: 3,
            maxlength: 50   
            }
        }
    });
    

    【讨论】:

    • 谢谢大家!!如果我只向持有 ruleSet1 的 field_1 添加一个属性?
    • This answer looks really familiar... @FredKafka,您需要使用 jQuery extend() 来修改集合。看我的回答。
    【解决方案2】:

    对所有字段应用一个 css 类

    $(".cssClassName").rules("add", {
            required: true,  
             minlength: 3,
              maxlength: 50 ,
            messages:
       {required:"error1",minlength:"error2",maxlength:"error3"}});
    

    【讨论】:

      【解决方案3】:

      将您的属性定义为变量,然后使用它:

      var name_reqs = {  
           required: true,  
          minlength: 3,
          maxlength: 50   
      };
      
      $("#form").validate({  
          rules: {
                 'name': name_reqs,
              'surname': name_reqs
          }
      });   
      

      【讨论】:

        【解决方案4】:

        显然有几种方法可以做到这一点,但如果你使用class rule:

        $.validator.addClassRules("name", {
          required: true,  
          minlength: 3,
          maxlength: 50
        });
        

        那么你可以像这样设置你的规则

        $("#form").validate({  
            rules:  
            {
             firstname : name, 
             surname : name
            }
        });
        

        或使用类名设置规则:

        <input id="firstname" name="firstname" class="name">
        <input id="surname" name="surnname" class="name">
        

        此方法在 jQuery 验证通用指南的 refactoring rules 部分中进行了讨论。

        【讨论】:

          【解决方案5】:

          取自my previous answer


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

          HTML

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

          jQuery

          $('#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/


          选项 1a) 您可以根据所需的通用规则将类分配给您的字段,然后将这些规则分配给类。您还可以分配自定义消息。

          HTML:

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

          .rules('add') method必须在调用.validate() 之后调用.each() 必须用于定位所有带有class 的元素。

          jQuery:

          $('#myForm').validate({
              // your other plugin options
          });
          
          $('.num').each(function() {
              $(this).rules('add', {
                  required: true,
                  number: true,
                  messages: {
                      required:  "your custom message",
                      number:  "your custom message"
                  }
              });
          });
          

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

          选项 1b) 同上,但不使用class,而是匹配名称属性的公共部分:

          $('[name*="field"]').each(function() {
              $(this).rules('add', {
                  required: true,
                  number: true,
                  messages: { // optional custom messages
                      required:  "your custom message",
                      number:  "your custom message"
                  }
              });
          });
          

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


          选项 2a) 您可以提取规则组并将它们组合成公共变量。

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

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


          选项 2b) 与上述 2a 相关,但取决于您的复杂程度,可以分离出某些组共有的规则,并使用.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
          
          var ruleSet3 = { };
          $.extend(ruleSet3, ruleSet1, ruleSet2); // combines sets 2 & 1 into set 3.  Defaults are included since they were already combined into sets 1 & 2 previously.
          
          $('#myForm').validate({
              rules: {
                  field_1: ruleSet2,
                  field_2: ruleSet_default,
                  field_3: ruleSet1,
                  field_4: ruleSet3
              }
          });
          

          最终结果:

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

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-08-30
            • 1970-01-01
            • 2018-12-26
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多