добавить метод проверки jquery

#jquery #validation

#jquery #проверка

Вопрос:

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

Австралия

 $.validator.addMethod("AusZip", function(value, element) {
    var isAus = $("#UpdateCountry").val() === "AUS";
    if ( isAus amp;amp; 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 amp;amp; 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 amp;amp; 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 amp;amp; notBHR amp;amp; notHun amp;amp; value.length < 5 ) {
        return false;
    } else return true;
}, "Zip Code Must Be at least 5 Digits");
  

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

спасибо!

РЕДАКТИРОВАТЬ — добавлено «UpdateCountry» в качестве идентификатора элемента. работает. извините за путаницу — моя ошибка!

Комментарии:

1. не могли бы вы создать скрипку, пожалуйста?

2. @mcgrailm — вот в чем суть jsfiddle.net/gYs2Y

Ответ №1:

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

  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. для чего используется строка .toUpperCase();? чтобы убедиться, что значения указаны в верхнем регистре, все они уже есть в списке выбора — я что-то упускаю? У меня есть пример этого здесь jsfiddle.net/gYs2Y

2. Я удалил .toUpperCase(). Также Бахрейн является BHR в вашем списке стран. Я не слишком знаком с плагином validator, вероятно, есть лучший способ сделать это встроенным в этот плагин, я не просто вижу его прямо сейчас. 🙂

3. Мне нравится этот метод, и я буду использовать его в дальнейшем. ошибка, с которой я столкнулся, была вызвана не самими моими правилами проверки, а элементом с неправильным именем.

4. Спасибо. Если вы хотите получить более настраиваемое сообщение об ошибке, относящееся к этой стране, попробуйте что-то вроде этого: jsfiddle.net/QmYsd

5. действительно потрясающе, легко добавить. Не могли бы вы немного объяснить пример с fiddle? спасибо

Ответ №2:

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

Комментарии:

1. не могли бы вы подробнее остановиться на этом. Это единственные три страны, которые предъявляют особые требования, все остальные страны должны иметь минимальную длину 5. Я думаю, я понимаю, что вы имеете в виду, не могли бы вы опубликовать какой-нибудь код?

Ответ №3:

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

Редактировать

сначала добавьте класс «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 amp;amp; notBHR amp;amp; notHun amp;amp; 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();
  

Комментарии:

1. итак, добавьте класс для длины каждой страны (Aus, Hun длина 4 class = «четыре» — все остальные длина 5 class = «пять» и т.д.) И сверьте длину с классом?

2. как помогает добавление класса? Не уверен, что я понимаю.

3. Дизайн @Dirty Bird, потому что проверка будет воздействовать на имена классов с помощью метода validate