1

我有一个有多个输入的表单。其中两个是“国家”和“邮政编码”。现在我希望“邮政编码”是必需的并且采用正确的邮政编码格式,除非国家不是“NL”。然后邮政编码不是必需的,可以有任何格式。我试过这个。但不知何故,当国家/地区设置为其他国家/地区时,不再需要输入(好的),但仍检查邮政编码的格式并返回错误消息。 (代码被缩短以便更好地阅读)

function setupValidator() {
    $.validator.addMethod("postcodeFormat",
        function (value, element) {
            console.log(element, value)
            return this.optional(element) || /[1-9][0-9]{3} ?[a-zA-Z]{2}/.test(value);
        },
        "vul een geldig postcode in"
    );

    $("#donatieform").validate({
        rules :{
           postcode :{required:function(){return $("#country").val() === 'NL';}, postcodeFormat:function(element){return $("#country").val() === 'NL';} },
        },

        focusInvalid  :false
    });
}

有谁知道为什么以及如何解决它?

4

2 回答 2

0

你让它变得比它需要的复杂一点。我只是稍微修改了您的自定义方法以检查国家/地区并删除了构成它的部分optional。然后我简化了你如何postcodeFormat.validate().

我还使用了规则depends上的选项,required仅在填写“国家/地区”时才需要“邮政编码”。

工作演示:http: //jsfiddle.net/ptUft/2

$(document).ready(function () {

    $.validator.addMethod("postcodeFormat", function (value, element) {
        if ($('#country').val() == 'NL') {
            return  (/[1-9][0-9]{3} ?[a-zA-Z]{2}/).test(value);
        } else {
            return true;
        }
    }, "vul een geldig postcode in");

    $("#donatieform").validate({
        rules: {
            postcode: {
                required: {
                    depends: function (element) {
                        return $('#country').is(':filled')
                    }
                },
                postcodeFormat: true
            }
        },
        focusInvalid: false
    });

});

编辑

在与 OP 交换意见后,我相信我已经对其进行了编辑,以便它现在可以按照他的意愿工作。

但是,他的 OP 中的代码一直是一样的:

http://jsfiddle.net/mDdCn/

于 2013-03-08T17:29:39.067 回答
0

您可以删除 jQuery 中的验证类,例如

  if($('#CountryId').val() !="")
    $(selector).rules('add', 'your rule name');
   else
    $(selector).rules('remove', 'your rule name)'
于 2013-03-08T14:51:33.883 回答