自定义jQuery验证.addMethod

时间:2010-10-07 14:24:07

标签: jquery validation

我有一个表单,以最小/最大长度为基础验证邮政编码。我需要为所有国家/地区提供5位数的拉链,除了澳大利亚,需要为4。 以下是我遇到的问题:

$.validator.addMethod(
    "AusZip",
    function(value, element) {
        if ($("#Country").val("Aus") && ("#PostalCode").length < 4)) {
        return false;
    } else return true;
},
"Australian Zip Code Must Be at least 4 Digits");

然后在规则中

rules: {
    PostalCode: {
        required: true,
        minlength: 5 //for all countries except AUS
        AusZip: true // for Aus
    }
}

长度不是要走的路吗?

1 个答案:

答案 0 :(得分:8)

我假设所有验证规则必须通过,这意味着如果您的长度为4,则minlength将始终失败。

此外,您在$之前错过了("#PostalCode").length

此行设置 #Country

的值
$("#Country").val("Aus")

您希望获取该值,与<{1}}进行比较。

"Aus"

尝试删除$("#Country").val() === "Aus" ,然后更改自定义功能。

试试这个:

编辑:已更改,因此您有2个验证程序。

一个验证该县是澳大利亚该值的长度至少为4.

另一个验证该县澳大利亚,并且该值的长度至少为5.

minlength

或者,如果您不需要基于国家/地区的自定义验证消息,则可以执行以下操作:

$.validator.addMethod("AusZip", function(value, element) {
    var isAus = $("#Country").val() === "Aus";

    if ( isAus && value.length < 4 ) {
        return false;
    } else return true;

}, "Australian Zip Code Must Be at least 4 Digits");

$.validator.addMethod("NonAusZip", function(value, element) {
    var isNotAus = $("#Country").val() !== "Aus";

    if ( isNotAus && value.length < 5 ) {
        return false;
    } else return true;

}, "Zip Code Must Be at least 5 Digits");


$('form').validate({
    rules: {
        PostalCode: {
            required: true,
            AusZip: true,
            NonAusZip: true
        }
    }
});​