为更多字段设置相同的属性
我有两个或更多文本字段,我想对它们应用相同的属性,避免写两次或多次相同的代码
这不起作用:
$("#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/