为更多字段设置相同的属性

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

这不起作用:

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

有任何想法吗?

试试这样

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

将css类应用于所有字段

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

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

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

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

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

然后你可以设置你的规则

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

或使用类名设置规则:

   

在jQueryvalidation通用指南的重构规则部分中讨论了此方法。

取自我之前的回答 :


出于我的例子的目的,这是基本的起始代码:

HTML

    

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:

    

必须 调用.each() 之后调用.rules('add')方法。 必须使用.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属性的公共部分:

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