我正在使用jQuery Validation插件:
我有一些大型表单我想要应用相同的规则。我简化了这个例子的代码。这段代码不起作用,但我想做这样的事情。第二条规则应适用于first_name
和last_name
。我想在此函数中封装所有规则,而不是编辑某些表单元素的类列表以添加所需的类或其他任何内容。
(同样,我有几组不同的表单字段,我想要分组。为了简单起见,我只将required: true
放在该元素中)
$('#affiliate_signup').validate(
{
rules:
{
email: {
required: true,
email: true
},
first_name,last_name: {
required: true
},
password: {
required: true,
minlength: 4
}
}
});
提前致谢。
答案 0 :(得分:88)
出于我的例子的目的,这是基本的起始代码:
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
}
}
});
选项1a)您可以提取规则组并将它们组合成公共变量。
var ruleSet1 = {
required: true,
number: true
};
$('#myForm').validate({
rules: {
field_1: ruleSet1,
field_2: ruleSet1,
field_3: ruleSet1
}
});
选项1b)与上述1a相关,但根据您的复杂程度,可以将某些群组共有的规则分开,并使用.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的必需数字。
选项2a)您可以根据所需的通用规则为您的字段分配类,然后将这些规则分配给类。使用addClassRules
方法,我们将采用复合规则并将其转换为类名。
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" />
jQuery的:
$('#myform').validate({ // initialize the plugin
// other options
});
$.validator.addClassRules({
num: {
required: true,
number: true
}
});
选项2b)与选项2a的主要区别在于,您可以使用此选项通过在创建后立即调用rules('add')
方法为动态创建的输入元素分配规则。您可以使用class
作为选择器,但这不是必需的。如下所示,我们使用了通配符选择器而不是class
。
在调用.rules()
之后的任何时间都必须1> >>方法调用.validate()
方法。
jQuery的:
$('#myForm').validate({
// your other plugin options
});
$('[name*="field"]').each(function() {
$(this).rules('add', {
required: true,
number: true
});
});
<强>文档强>
答案 1 :(得分:0)
您可以通过以下方式使用“getter”语法:
{
rules:
{
email: {
required: true,
email: true
},
first_name: {
required: true
},
get last_name() {return this.first_name},
password: {
required: true,
minlength: 4
}
}
}
答案 2 :(得分:0)
如果我理解正确,您想将许多规则应用于许多字段,在某些规则上可能会有所不同,但是您懒得在其他字段重复使用相同的规则。 但是,使用jQuery validate可以在一个输入字段上使用多个规则。只需在此处使用数组符号即可。
要实现用例,只需将data
属性添加到每个输入字段,并添加要应用的规则。在最佳情况下,请使用url编码的json格式,以便每个输入字段仅需要一个data
属性。例如:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>validate test</title>
</head>
<body>
<form id="myForm" name="myForm" method="post" action="www.example.com/my-url">
<input type="text" name="txt1" data-rules="%7B%22required%22%3Atrue%2C%22minlength%22%3A2%2C%22maxlength%22%3A10%7D" />
<input type="text" name="txt2" data-rules="%7B%22required%22%3Atrue%2C%22minlength%22%3A2%2C%22maxlength%22%3A10%7D" />
<input type="number" name="number1" data-rules="%7B%22required%22%3Atrue%2C%22number%22%3Atrue%2C%22min%22%3A1%2C%22max%22%3A999%7D" />
<input type="email" name="email1" data-rules="%7B%22required%22%3Atrue%2C%22email%22%3Atrue%2C%22minlength%22%3A20%7D" />
<input type="email" name="email2" data-rules="%7B%22required%22%3Atrue%2C%22email%22%3Atrue%2C%22minlength%22%3A20%7D" />
</form>
<script type="text/javascript">
var $field = null;
var rules = {};
$('#myForm input, #myForm textarea').each(function (index, field) {
$field = $(field);
rules[$field.attr('name')] = JSON.parse(decodeURIComponent($field.attr('data-rules')));
});
$('#myForm').validate(rules);
</script>
</body>
</html>
其背后的基本技术很简单:
您也可以通过相同的验证器使用输入组,例如G。通过为其使用类以及将规则对象与预定义的JavaScript变量配合使用。我想您对如何以一种优雅的方式变得懒惰有了想法;-)