JQuery валидатор добавить метод - PullRequest
0 голосов
/ 09 мая 2011

У меня проблема с тем, чтобы заставить это работать. В нашей форме мы проверяем длину почтового индекса в зависимости от выбранной страны. Минимальная длина в Австралии и Венгрии составляет 4 символа, в Бахрейне - не менее 3, а во всех других странах - не менее 5. Поэтому я написал правило для:

Австралия

$.validator.addMethod("AusZip", function(value, element) {
    var isAus = $("#UpdateCountry").val() === "AUS";
    if ( isAus && value.length < 4 ) {
        return false;
    } else return true;
}, "Australian Zip Code Must Be at least 4 Digits");

Венгрия

$.validator.addMethod("HunZip", function(value, element) {
    var isHun = $("#UpdateCountry").val() === "HUN";
    if ( isHun && value.length < 4 ) {
        return false;
    } else return true;
}, "Hungarian Zip Code Must Be at least 4 Digits");

и Бахрейн

$.validator.addMethod("BHRZip", function(value, element) {
    var isBHR = $("#UpdateCountry").val() === "BHR";
    if ( isBHR && value.length < 3 ) {
        return false;
} else return true;
}, "Bahrain Zip Code Must Be at least 3 Digits");

Все остальные страны, указанные здесь, и вот где моя проблема

$.validator.addMethod("RegZip", function(value, element) {
    var notAus = $("#UpdateCountry").val() != "AUS";
    var notBHR = $("#UpdateCountry").val() != "BHR";
    var notHun = $("#UpdateCountry").val() != "HUN";
    if ( notAus && notBHR && notHun && value.length < 5 ) {
        return false;
    } else return true;
}, "Zip Code Must Be at least 5 Digits");

Когда я добавляю правило для «RegZip», даже если вы выбираете Австралию или Венгрию и у вас 4-значный почтовый индекс, вы получаете ошибку - то же самое, если вы выбираете Венгрию и 3-значный почтовый индекс. Когда я удаляю «RegZip», вы получаете только ошибку с Австралией / Венгрией, если она меньше 4 цифр, и ошибку с Венгрией, если меньше 3. Проблема заключается в том, что во всех других странах нет требований. Чего мне не хватает?

ТНХ!

EDIT - добавлено «UpdateCountry» в качестве идентификатора элемента. работает. простите за путаницу - мой плохой!

Ответы [ 3 ]

1 голос
/ 09 мая 2011

Лучший способ сделать это было бы примерно так:

 var zips = {
  'AUS': { min: 4 },
  'HUN': { min: 4 },
  'BHR': { min: 3 }

};
var zipOther = { min: 5 };

$.validator.addMethod('zip', function(value, element) {
  return value.length >= (zips[$('#UpdateCountry').val()] || zipOther)['min'];
}, 'Zip code not the correct length');
1 голос
/ 09 мая 2011

С помощью предоставленного вами кода вы проверяете только три страны в функции RegZip, поскольку все остальное возвращает true. У вас должна быть какая-то другая общая проверка zip, вызываемая в предложении else.

0 голосов
/ 09 мая 2011

Я бы избавился от всех ваших проверок на $ ("# Country"). Val () и просто изменил бы имя класса на входе при изменении Country, выберите

EDIT

сначала добавьте класс "RegZip" к входу, который вы хотите проверить как начальную точку

затем добавьте методы валидатора

$.validator.addMethod("AusZip", function(value, element) {
    if (value.length < 4 ) {
        return false;
    } else return true;
}, "Australian Zip Code Must Be at least 4 Digits");

//Hungary

$.validator.addMethod("HunZip", function(value, element) {
    if (value.length < 4 ) {
        return false;
    } else return true;
}, "Hungarian Zip Code Must Be at least 4 Digits");

//and Bahrain

$.validator.addMethod("BHRZip", function(value, element) {
    if (value.length < 3 ) {
        return false;
    } else return true;
}, "Bahrain Zip Code Must Be at least 3 Digits");

//All other countries specified here, and this is where my problem is

$.validator.addMethod("RegZip", function(value, element) {
    if ( notAus && notBHR && notHun && value.length < 5 ) {
        return false;
    } else return true;
}, "Zip Code Must Be at least 5 Digits");

добавить событие изменения в выпадающий список

$('#dropdown_menu_selector').onchange(function(){
    if (this.value === "AUS"){
        $('#input_to_validate').removeClass().addClass('AUSZip')
    }
    //etc etc..
});

подтвердить форму

   $('#formid').validate();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...