我有一个有几个输入的表单。其中两个是“国家”和“邮政编码”。 现在我想要'邮政编码'是必需的,并且需要适当的邮政编码,除非该国家不是'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
});
}
有谁知道为什么以及如何解决它?
答案 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中的代码一直在运作: