邮政/邮政编码的jquery验证规则

时间:2017-08-17 14:33:11

标签: jquery jquery-validate

我得到了以下代码部分有效。如果国家/地区为加拿大pay_id_1 == 1,则需要验证加拿大邮政,如果pay_id_1 == 234,则需要美国邮政编码。

var validator = $form.validate({
    ignore: ".ignore,:hidden:not(input[type='hidden'])",
    rules: {
        par_prenom_1: {
            required: true
        },
        par_nom_1: {
            required: true
        },
        par_adresse_1: {
            required: true
        },
        par_ville_1: {
            required: true
        },
        pro_id_1: {
            required: true
        },
        pay_id_1: {
            required: true
        },
        par_codepostal_1: {
            required: true,
            postalCodeCA: function() {
                if ($("#pay_id_1").val() === 1) {
                    return true
                } else {
                    return false
                }
            },
            zipcodeUS: function() {
                if ($("#pay_id_1").val() === 234) {
                    return true
                } else {
                    return false
                }
            }
        },
        par_telephone1_1: {
            required: true
        },
        par_courriel_1: {
            required: true,
            email: true
        },
        par_naissance_1: {
            required: true,
            dateCA: true,
            daterange: ["1917-09-04", "2001-09-03"]
        },
        par_sexe_1: {
            required: true
        },
        que_2580_1: {
            required: true
        },
        que_2581_1: {
            required: true
        },
        que_2582_1: {
            required: true
        },
        que_2583_1: {
            required: true
        }
    },
    messages: {
        par_prenom_1: {
            required: "Veuillez entrer une valeur"
        },
        par_nom_1: {
            required: "Veuillez entrer une valeur"
        },
        par_adresse_1: {
            required: "Veuillez entrer une valeur"
        },
        par_ville_1: {
            required: "Veuillez entrer une valeur"
        },
        pro_id_1: {
            required: "Veuillez entrer une valeur"
        },
        pay_id_1: {
            required: "Veuillez entrer une valeur"
        },
        par_codepostal_1: {
            required: "Veuillez entrer le code postal/zip",
            postalCodeCA: "Veuillez entrer un code postal/zip valide"
        },
        par_telephone1_1: {
            required: "Veuillez entrer le numéro de téléphone",
            phoneUS: "Le numéro de téléphone doit être sous le format 555-555-5555"
        },
        par_courriel_1: {
            required: "Veuillez entrer le courriel",
            email: "Le courriel doit être une adresse valide"
        },
        par_naissance_1: {
            required: "Veuillez entrer la date de naissance",
            dateCA: "La date de naissance doit être sous le format AAAA-MM-JJ",
            daterange: "La date de naissance doit être entre {0} et {1}"
        },
        par_sexe_1: {
            required: "Veuillez entrer une valeur"
        },
        que_2580_1: {
            required: "Veuillez faire un choix"
        },
        que_2581_1: {
            required: "Veuillez entrer une valeur"
        },
        que_2582_1: {
            required: "Veuillez entrer une valeur"
        },
        que_2583_1: {
            required: "Veuillez entrer une valeur"
        }
    }
});

问题是两条规则都适用于任何国家/地区。你能看出我能做什么吗?

1 个答案:

答案 0 :(得分:1)

您需要利用.rules()方法动态更改字段上的规则。

您可以使用clickfocus事件触发该功能。使用rules方法中的.validate()对象设置任何初始默认规则。

另外,如其他答案中所述,您需要使用引号,因为字段中的值是字符串。

$('[name="par_codepostal_1"]').on('click focus', function() {
    if ($("#pay_id_1").val() === '1') {
        $(this).rules('add', {
            postalCodeCA: true,
            zipcodeUS: false
        });
    } else if ($("#pay_id_1").val() === '234') {
        $(this).rules('add', {
            postalCodeCA: false,
            zipcodeUS: true
        });
    } else {
        // whatever
    }
});

DEMO:jsfiddle.net/rb3fetuk/

或者,您可以在blur远离pay_id_1字段时触发规则更改。

$('#pay_id_1').on('blur', function() {
    if ($(this).val() === '1') {
        $('[name="par_codepostal_1"]').rules('add', {
            postalCodeCA: true,
            zipcodeUS: false
        });
    } else if ($(this).val() === '234') {
        $('[name="par_codepostal_1"]').rules('add', {
            postalCodeCA: false,
            zipcodeUS: true
        });
    } else {
        // whatever
    }
});

DEMO:jsfiddle.net/rb3fetuk/1/