2015-02-10 68 views
2

我有3个验证器方法来验证表单域。对于我必须验证的每个表单字段,我需要始终调用这3个验证器。是否可以编写一个验证器方法,在内部调用这3个方法并返回适当的错误?Jquery - 在一个大的验证器方法内调用多个验证器

/* 
* Do not allow a name to include only underscores. 
*/ 
jQuery.validator.addMethod('notallunderscores', function(value, element) 
{ 
    value = value.replace(/\_/g,''); 
    return this.optional(element) || value.length > 0; 
}, "Enter more than only underscore characters."); 

/* 
* Do not allow a name to include only hyphens. 
*/ 
jQuery.validator.addMethod('notallhyphens', function(value, element) 
{ 
    value = value.replace(/\-/g,''); 
    return this.optional(element) || value.length > 0; 
}, "Enter more than only hyphens."); 

/* 
* Do not allow a name to include leading or trailing spaces. 
*/ 
jQuery.validator.addMethod('notrailingorleadingspaces', function(value, element) 
{ 
    return this.optional(element) || ! value.match(/^ .*|.*\ $/g); 
}, "Please remove any leading or trailing spaces."); 

我要找的验证应该是这样的:

 /* 
    * Call each of the above validator methods and return appropriate error. 
    */ 
    jQuery.validator.addMethod('validateformfield', function(value, element) 
    { 
     //Call the above 3 validator methods 
     //Return the appropriate error returned by the above validators. 
    }, "Return the error message from the failed validator."); 

回答

3

不,你不能将三个不同的自定义方法到一个单一的自定义方法同时保持三个不同的错误信息。没有办法将它们嵌套在一起。


但是,你可以做一个“复合规则”,并使用the addClassRules method将其分配给class

jQuery.validator.addClassRules("myCompoundRule", { 
    notallunderscores: true, 
    notallhyphens: true, 
    notrailingorleadingspaces: true 
}); 

然后你分配class到您想要这些规则应用input ...

<input type="text" name="foo" class="myCompoundRule ... 

否则,如果你不想使用class,那么你必须单独使用.validate()方法声明自定义规则,因为我认为您已经在做...

$('#myform').validate({ 
    rules: { 
     foo: { 
      notallunderscores: true, 
      notallhyphens: true, 
      notrailingorleadingspaces: true 
     } 
    } 
}); 

你也可以将各种规则组合成“集合”。请参阅下面的我的答案,了解将多个规则分配到多个字段的其他创造性方法。