如何制作' required' AND'格式'有条件的jQuery Validate插件?

时间:2013-03-08 14:46:40

标签: jquery jquery-validate

我有一个有几个输入的表单。其中两个是“国家”和“邮政编码”。 现在我想要'邮政编码'是必需的,并且需要适当的邮政编码,除非该国家不是'NL'。然后邮政编码不是必需的,可以有任何格式。我试过这个。 但不知何故,当国家设置为其他国家时,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
    });
}

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

2 个答案:

答案 0 :(得分:0)

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

  if($('#CountryId').val() !="")
    $(selector).rules('add', 'your rule name');
   else
    $(selector).rules('remove', 'your rule name)'

答案 1 :(得分: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/