Jquery - 在一个大的验证器方法中调用多个验证器

时间:2015-02-10 18:29:25

标签: javascript jquery jquery-validate

我有3个验证方法来验证表单字段。对于我必须验证的每个表单字段,我需要一直调用这3个验证器。是否可以编写一个验证器方法,在内部调用这3个方法并返回相应的错误?

/*
 * 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.");

1 个答案:

答案 0 :(得分: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
        }
    }
});

您还可以将各种规则组合到&#34; sets&#34;中。请参阅下面的我的答案,了解为多个字段分配多个规则的其他创造性方法。