自定义jQuery验证.addMethod

Dir*_*ign 8 validation jquery

我有一个表格,以最小/最大长度为基础验证邮政编码.我需要将所有国家/地区的拉链最小值设为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");
Run Code Online (Sandbox Code Playgroud)

然后在规则中

rules: {
    PostalCode: {
        required: true,
        minlength: 5 //for all countries except AUS
        AusZip: true // for Aus
    }
}
Run Code Online (Sandbox Code Playgroud)

长度不是要走的路吗?

use*_*716 8

我假设所有验证规则都必须通过,这意味着minlength如果你的长度为4 ,你的总是会失败.

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

此行也设置了值#Country.

$("#Country").val("Aus")
Run Code Online (Sandbox Code Playgroud)

你想获得的价值,并比较"Aus".

$("#Country").val() === "Aus"
Run Code Online (Sandbox Code Playgroud)

尝试删除minlength并更改自定义功能.

试试这个:

编辑:更改,以便您有2个验证器.

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

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

$.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
        }
    }
});?
Run Code Online (Sandbox Code Playgroud)

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

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

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

}, "Zip Code is not long enough");

$('form').validate({
    rules: {
        PostalCode: {
            required: true,
            GlobalZip: true
        }
    }
});?
Run Code Online (Sandbox Code Playgroud)