У меня есть сайт с использованием ввода: текст, выбор и выбор нескольких элементов, которые генерируют текстовый вывод при нажатии кнопки.
Проведя поиск SO, я нашел примеры кода проверки, которые будут предупреждать пользователя, когда поле select возвращает пустой value-
// alert if a select box selection is not made
var selectEls = document.querySelectorAll('select'),
numSelects = selectEls.length;
for(var x=0;x<numSelects;x++) {
if (selectEls[x].value === '') {
alert('One or more required fields does not have a choice selected... please check your form');
return false;
$(this).addClass("highlight");
}
В конце я попытался добавить условие после отклонения предупреждения, так что окно выбора оскорбителя будет выделено добавлением класса "highlight", но это ничего не делает. Мой.highlight css - {border: 1px red solid;}
Любая помощь здесь?
ОБНОВЛЕНО С ОТВЕТОМ - Спасибо @Adam Rackis
Этот код работает отлично. Я добавил строку для удаления добавленного класса.highlight для выбора, который не вызвал ошибку после исправления
// alert if a select box selection is not made
var selectEls = document.querySelectorAll('select'),
numSelects = selectEls.length;
$('select').removeClass("highlight");//added this to clear formatting when fixed after alert
var anyInvalid = false;
for(var x=0;x<numSelects;x++) {
if (selectEls[x].value === '') {
$(selectEls[x]).addClass("highlight");
anyInvalid = true;
}}
if (anyInvalid) {
alert('One or more required fields does not have a choice selected... please check your form');
return false;
}
Вы были близки. В вашем цикле this
не относится к каждому выбранному, который вы проверяете.
Кроме того, вы возвращаете false до добавления выделенного класса. Вероятно, вы захотите отслеживать, являются ли какие-либо исключения недопустимыми, и верните false в самом конце после того, как вы закончите проверку.
Наконец, подумайте о том, чтобы перевести свое предупреждение на самое нижнее, поэтому ваш пользователь не увидит несколько предупреждений.
var anyInvalid = false;
for(var x=0;x<numSelects;x++) {
if (selectEls[x].value === '') {
$(selectEls[x]).addClass("highlight");
anyInvalid = true;
}
}
if (anyInvalid) {
alert('One or more required fields does not have a choice selected... please check your form');
return false;
}
Кроме того, поскольку вы уже используете jQuery, почему бы не воспользоваться преимуществами его функций немного больше:
$('select').each(function(i, sel){
if (sel.value === '') {
$(el).addClass("highlight");
anyInvalid = true;
}
});
if (anyInvalid) {
alert('One or more required fields does not have a choice selected... please check your form');
return false;
}
return false;
после$(this).addClass("highlight");
и кстати, чтоthis
значит здесь?