如何在jQuery中要求不同的规则验证'用于多个页面的方法?

时间:2011-04-19 15:21:06

标签: jquery jquery-plugins parameters jquery-validate

我有几个联系表单,它们都使用相同的方法来使用jQuery Validate验证表单内容。有些页面需要其他页面不需要的字段。我需要使用IF语句来检测它是哪个页面,如果页面需要该字段,那么它应该在调用validate()方法时添加到rules参数中。

有人能给我一个如何做到这一点的例子吗?这就是我需要做的事情(显然不起作用)。由于所有空格,我无法在上面的var中声明规则的所有内容:

$("#contactForm").validate( {
    rules: {
        name: {
            required: true
        },
        phone: {
            required: true
        },
        if ( page === "contactJoe" ) {
            subject: {
                required: true
                },
        }
        email: {
            required: true,
            email: true
        }
    }
});     

2 个答案:

答案 0 :(得分:1)

如果你有一个名为

的方法怎么办?
    function SetupValidation(options){
        var defaults = {<defaults for program>};
        var settings = $.extend({}, defaults, options);
        return settings;
    }

然后每个页面都可以使用它所需的任何内容调用SetupValidation(电话,电子邮件等),您可以让“基本”页面使用此方法返回的设置值。

这将采用您的默认选项并合并您传入的任何选项。

例如,如果Phone默认设置为“true”而您传入“False”,则会更改为False。

答案 1 :(得分:1)

我会为每个页面使用一组单独的规则,但是如果你想坚持这种方法,这将适用于你的例子:

$("#contactForm").validate( {
    rules: {
        name: {
            required: true
        },
        phone: {
            required: true
        },
        subject: {
            required: page === "contactJoe"
        },
        email: {
            required: true,
            email: true
        }
    }
});

编辑@OP评论

  

如果主题需要针对多个页面显示,我该怎么做?

subject: {
    required: page === "a" || page === "b" || page === "c"
}

// or
var subjectRequiredPages = ["a", "b", "c"];
// ...
subject: {
    required: $.inArray(page, subjectRequiredPages) !== -1
}

// or
var subjectPages = {a: true, b: true, c: true};
// ...
subject: {
    required: subjectPages[page]
}