我有两个或更多文本字段,我想对它们应用相同的属性,避免写两次或多次相同的代码
这不起作用:
$("#form").validate({
rules:
{
'name', 'surname':{
required: true,
minlength: 3,
maxlength: 50
}
}
});
任何想法?
答案 0 :(得分:1)
将css类应用于所有字段
$(".cssClassName").rules("add", {
required: true,
minlength: 3,
maxlength: 50 ,
messages:
{required:"error1",minlength:"error2",maxlength:"error3"}});
答案 1 :(得分:1)
将属性定义为变量,然后使用它:
var name_reqs = {
required: true,
minlength: 3,
maxlength: 50
};
$("#form").validate({
rules: {
'name': name_reqs,
'surname': name_reqs
}
});
答案 2 :(得分: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
}
}
});
答案 3 :(得分:1)
显然,有几种方法可以做到这一点但是如果你使用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部分中进行了讨论。
答案 4 :(得分:1)
出于我的例子的目的,这是基本的起始代码:
<强> 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
}
}
});
DEMO :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" />
在调用.validate()
后,.rules('add')
method 必须被称为,必须使用.each()
来定位所有class
元素1}}。
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"
}
});
});
DEMO :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"
}
});
});
DEMO :http://jsfiddle.net/rq5ra/6/
选项2a)您可以提取规则组并将它们组合成公共变量。
var ruleSet1 = {
required: true,
number: true
};
$('#myForm').validate({
rules: {
field_1: ruleSet1,
field_2: ruleSet1,
field_3: ruleSet1
}
});
DEMO :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之间的必需数字。