#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