Пользовательская проверка jQuery .addMethod - PullRequest
8 голосов
/ 07 октября 2010

У меня есть форма, которая проверяет почтовые индексы на основе минимальной / максимальной длины.Мне нужно, чтобы zip min был 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
    }
}

Длина не путь?

1 Ответ

8 голосов
/ 07 октября 2010

Я предполагаю, что все правила проверки должны пройти, что означает, что ваш 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
        }
    }
});​
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...