Проверка каждого необходимого ввода на пустое значение с помощью jQuery
Я проверяю для каждого обязательного поля в форме. Я попробовал это, но это работает только для первого ввода. Как я могу заставить его работать для каждого входа?
if($('[required]').val() != ''){
$('.button1').fadeIn(0);
$('.button2').fadeOut(0);
}else{
$('.button1').fadeOut(0);
$('.button2').fadeIn(0);
}
РЕДАКТИРОВАТЬ: для большего контекста, вот еще одна функция, которую я имел ниже, чтобы применить, когда они меняются, и HTML-код.
$('[required]').change(function() {
if($('[required]').val() != ''){
$('.button1').fadeIn(0);
$('.button2').fadeOut(0);
}else{
$('.button1').fadeOut(0);
$('.button2').fadeIn(0);
}
});
HTML
У меня есть куча входов, как эти:
<input type="text" id="title" name="title" value="" required>
<input type="text" id="size" name="size" value="" required>
<input type="text" id="length" name="length" value="" required>
кнопки:
<a class="button1" style="display:none" >button 1</a>
<a class="button2">button 2</a>
Поэтому я хочу проверить наличие пустых полей, когда страница загружается и когда они меняются.
Кстати, у меня нет формы тега вокруг них, потому что это для мобильных устройств и не думаю, что это действительно необходимо, если это имеет какое-то значение.
Еще раз спасибо!
6 ответов
Событие "изменение" работает для элементов SELECT и элементов RADIO, но не для элементов INPUT. Вы должны использовать события "focus/blur" для обработки полей ввода, в вашем случае событие "blur" подходит идеально.
Если вы хотите обработать много элементов с помощью jQuery, то лучше использовать операции на основе CLASS, в вашем случае просто добавить один и тот же класс "требуется" для всех полей ввода и выполнить операции с этими полями, используя этот класс.
Я настроил ваши блоки кода, как я указал выше, проверьте их один раз, а затем дайте мне знать, если обновленный код также не работает для вас, блоки кода обновлений:
HTML-код
<input type="text" id="title" name="title" value="" class="required">
<input type="text" id="size" name="size" value="" class="required">
<input type="text" id="length" name="length" value="" class="required">
<a class="button1" style="display:none" >button 1</a>
<a class="button2">button 2</a>
Код JS
$('.required').blur(function() {
var empty_flds = 0;
$(".required").each(function() {
if(!$.trim($(this).val())) {
empty_flds++;
}
});
if (empty_flds) {
$('.button1').fadeOut(0);
$('.button2').fadeIn(0);
} else {
$('.button1').fadeIn(0);
$('.button2').fadeOut(0);
}
});
Вы также можете проверить рабочий код прямо здесь.
Это?
$( ':input[required]', yourForm ).each( function () {
if ( this.value.trim() !== '' ) {
// ...
}
});
где yourForm
является ссылкой на элемент FORM (здесь также можно использовать селектор). Это контекст - вы хотите искать только поля внутри формы.
Использовать each()
функция ( док):
$('[required]').each(function() {
if($('[required]').val() != ''){
$('.button1').fadeIn(0);
$('.button2').fadeOut(0);
}else{
$('.button1').fadeOut(0);
$('.button2').fadeIn(0);
}
});
Вам нужно получить значение каждого элемента, и если ВСЕ они не пусты, сделайте первое, а если ЛЮБОЙ из них пуст, сделайте второе, правильно?
[Непроверенный]
// test if any of the values are not empty
var is_empty = false;
$('[required]').each( function(idx, elem) {
is_empty = is_empty || ($(elem).val() == '');
});
// now do the thing, but only if ALL the values are not empty
if ( ! is_empty) {
$('.button1').fadeIn(0);
$('.button2').fadeOut(0);
}else{
$('.button1').fadeOut(0);
$('.button2').fadeIn(0);
}
Это мой код
$(document).ready(function() {
$('button[type="submit"]').click(function(event) {
$('[required]').each(function (i, el) {
if ($(el).val() == '' || $(el).val() == undefined) {
alert('Please fill in all mandatory fields!');
event.preventDefault();
return false;
}
});
});
});
Просто, и для дополнительной меры добавьте красную рамку
Сначала сделай стиль
.redborder { border: 2px solid red; }
Тогда просто немного Javascript
// Remove all redborders
$("#my_form :input.redborder").removeClass("redborder");
// Check all required fields have text, you can even check other values
$("#my_form :input[required]").each(function() {
if ($.trim($(this).val()) == "") $(this).addClass("redborder");
});
// If any input has a red border, return
if ($("#todo_edit_form .redborder").length > 0 ) return;