Я предполагаю, что все правила проверки должны пройти, что означает, что ваш minlength
всегда будет неудачным, если у вас длина 4.
Кроме того, вам не хватает $
до ("#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
}
}
});