我有一个表单,可以根据最小/最大长度验证邮政编码。我需要让所有国家/地区的邮政编码至少为 5 位数字(澳大利亚除外,澳大利亚需要为 4 位数字)。 这是我遇到的问题:
$.validator.addMethod(
"AusZip",
function(value, element) {
if ($("#Country").val("Aus") && ("#PostalCode").length < 4)) {
return false;
} else return true;
},
"Australian Zip Code Must Be at least 4 Digits");
然后在规则中
rules: {
PostalCode: {
required: true,
minlength: 5 //for all countries except AUS
AusZip: true // for Aus
}
}
长度不是解决办法吗?
最佳答案
我假设所有验证规则都必须通过,这意味着如果长度为 4,您的 minlength
将始终失败。
此外,您在 ("#PostalCode").length
之前缺少 $
。
此行还设置#Country
的值。
$("#Country").val("Aus")
您想要获取该值,并将其与“Aus”
进行比较。
$("#Country").val() === "Aus"
尝试删除 minlength
,并更改您的自定义函数。
试试这个:
编辑:已更改,以便您有 2 个验证器。
验证该县是否为澳大利亚且值的长度至少为 4。
另一个验证该县不是澳大利亚,并且值的长度至少为 5。
$.validator.addMethod("AusZip", function(value, element) {
var isAus = $("#Country").val() === "Aus";
if ( isAus && value.length < 4 ) {
return false;
} else return true;
}, "Australian Zip Code Must Be at least 4 Digits");
$.validator.addMethod("NonAusZip", function(value, element) {
var isNotAus = $("#Country").val() !== "Aus";
if ( isNotAus && value.length < 5 ) {
return false;
} else return true;
}, "Zip Code Must Be at least 5 Digits");
$('form').validate({
rules: {
PostalCode: {
required: true,
AusZip: true,
NonAusZip: true
}
}
});
<小时/>
或者,如果您不需要基于国家/地区的自定义验证消息,您可以这样做:
$.validator.addMethod("GlobalZip", function(value, element) {
var isAus = $("#Country").val() === "Aus";
if ( ( isAus && value.length < 4 ) || value.length < 5 ) {
return false;
} else return true;
}, "Zip Code is not long enough");
$('form').validate({
rules: {
PostalCode: {
required: true,
GlobalZip: true
}
}
});
关于jquery - 自定义 jQuery 验证 .addMethod,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3882615/