我应该使用内置类还是规则来实现validation?

我正在使用jQuery validate插件来validation我的表单。 正如我所看到的那样(我很难从文档中解决问题),我有两个基本选择:如何应用内置validation规则:

  1. 在HTML中应用该类

  2. 调用validate方法时,按输入id指定规则

     $('#sales').validate({ rules: { myNum: {number: true} } }); 

哪个被认为是“最佳实践”? 我试图决定在validate方法中将所有规则编码在一个地方是否更清楚,以便我可以在一个集中位置看到我的所有validation,或者如果将HTML中的简单规则编码为有意义的话类,只在validate方法中放置自定义validation。 什么是更可接受的validation编码方式? 我何时使用哪种方法应该确定什么?

除了个人选择之外,唯一需要考虑的因素是,如果要作为规则应用的方法是采用其他参数的方法,则不能将方法名称用作类名。 例如这些方法

  • MINLENGTH个,
  • 最长长度
  • rangelength
  • 最大
  • 范围
  • 等于

所有都采取参数 – 即他们的定义是

 function(value, element, param) 

而不是

 function(value, element) 

所以这个标记不起作用

   

不需要额外参数的方法是“必需”,“电子邮件”,“url”,“日期”等。

因此,即使对于您自己的自定义方法,您也可以通过类名将它们应用于表单字段,只要它们具有签名函数(值,元素)

文档并不完全是最新的 – 有多种方法可以将方法应用于标记中的输入字段,包括文档中根本没有提到的数据属性。 例如,这些都是有效的:

       

NB。 对于数据样式,您需要一个最新版本的插件

您可以使用内置rules()方法添加规则。 见文档。

这就像两种方法中最好的一样。 您可以避免使用.validate()定义所有规则,同时仍然可以无限制地定义自定义规则集 。 然后,这些规则的“集合”可以由自定义classnameid等分配。

注意:调用.each() 必须调用此方法,并且必须与.each()结合使用。

当您向表单动态添加字段时,此方法也非常有用。

(请注意,与在.validate()添加规则时相比,格式与定义的自定义消息略有不同)

jsFiddle DEMO

HTML:

     

jQuery的:

 $('form').validate({ // your other options }); // the following method must come AFTER .validate() $('form').find('.myclass').each(function() { $(this).rules('add', { required: true, digits: true, range: [1,5], messages: { required: "Required input", digits: "Only digits please", range: "Please only enter between {0} and {1}" } }); }); 

或者,您可以按字段name而不是class

jsFiddle DEMO

HTML:

     

jQuery的:

 $('#form').validate({ // your other options }); // the following method must come AFTER .validate() $("input[name^='field']").each(function() { $(this).rules('add', { required: true, digits: true }); });