Проверка каждого необходимого ввода на пустое значение с помощью 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;
Другие вопросы по тегам