我正在使用
jQuery Validation插件:
我有几个我想要应用相同规则的大型表格。我已经简化了这个例子的代码。这段代码不起作用,但我想做这样的事情。第二条规则应适用于first_name和last_name。我想在这个函数中封装所有的规则,而不是编辑一些表单元素的类列表,以添加一个必需的类或者其他的。
(再次,我有几个不同的表单域组,我想组合不同的要求,我只需要:真正的元素为了简单起见)
$('#affiliate_signup').validate( { rules: { email: { required: true,email: true },first_name,last_name: { required: true },password: { required: true,minlength: 4 } } });
提前致谢。
解决方法
为了我的例子的目的,这是基本的起始代码:
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,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的主要区别在于,您可以通过在创建它们之后立即调用规则(‘add’)方法来将规则分配给动态创建的输入元素。您可以使用类作为选择器,但不是必需的。如下所示,我们使用通配符选择器而不是类。
调用.validate()后,任何时候都必须调用.rules()方法。
jQuery:
$('#myForm').validate({ // your other plugin options }); $('[name*="field"]').each(function() { $(this).rules('add',{ required: true,number: true }); });
文档: