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

邮政编码/邮政编码的jquery验证规则,jquery,jquery-validate,Jquery,Jquery Validate,我得到了以下部分有效的代码。如果国家是加拿大pay_id_1==1,我需要验证加拿大邮政;如果pay_id_1==234,我需要验证美国邮政编码 问题是这两条规则都适用于任何国家。您能看到我看不到的吗?您需要利用.rules方法动态更改字段上的规则 您可以使用单击和聚焦事件触发该函数。使用.validate方法中的rules对象设置任何初始默认规则 另外,如另一个答案中所述,您需要使用引号,因为字段中的值是字符串 $('[name="par_codepostal_1"]').on('click

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


问题是这两条规则都适用于任何国家。您能看到我看不到的吗?

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

您可以使用单击和聚焦事件触发该函数。使用.validate方法中的rules对象设置任何初始默认规则

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

$('[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
    }
});
演示:

或者,您可以在模糊pay_id_1字段时触发规则更改


演示:

发布相关HTML,以便构建演示。当你这样做的时候,去掉所有不相关的字段。这只是一个演示该问题的最小示例。另外,您严格检查$pay_id_1.val(返回字符串)与数字文本1和234之间的相等性。即使$pay_id_1.val为'234',每次都会失败234'===234==>false。您有三个选项:1将$pay_id_1.val转换为数字。例:+$pay\u id\u 1.val==1。2将数字文字转换为字符串文字。例如:$pay\u id\u 1.val=='1'。3使用运行自动类型强制的双等于运算符:Ex:$pay\u id\u 1.val==1。模糊解决方案运行良好。我添加了更改事件。谢谢!
$('[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
    }
});
$('#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
    }
});