Jquery каждый цикл не работает для ввода текста

#jquery #each

#jquery #каждый

Вопрос:

Привет, я пытаюсь сделать кнопку поиска активной / неактивной в зависимости от того, ввел ли пользователь текст в ОБА текстовых поля. В настоящее время он становится активным, когда пользователь вводит текст только в первом поле. Может кто-нибудь, пожалуйста, скажите мне, что я делаю не так?? Заранее спасибо!

 $(".searchBtn.active").hide();
$(".searchBtn.inactive").prop('disabled', true);

$.each($(".searchFormContent input[type=text]"), function () {
     $(this).keyup(function () {
         if ($(this).val().length > 0) {
             $(".searchBtn.inactive").hide();
             $(".searchBtn.active").show();
         } else {
             $(".searchBtn.active").hide();
             $(".searchBtn.inactive").show();
         }
     });
});
  

Теперь я попробовал это:

 $(".searchFormContent input[type=text]").each(function () {
            $(this).keyup(function () {
                if ($(this).val().length > 0) {
                    $(".searchBtn.inactive").hide();
                    $(".searchBtn.active").show();
                } else {
                    $(".searchBtn.active").hide();
                    $(".searchBtn.inactive").show();
                }
            })
        });
  

и это:

$(".searchFormContent input[type=text]").keyup(function () {
if ($(this).val().length > 0) {
$(".searchBtn.inactive").hide();
$(".searchBtn.active").show();
} else {
$(".searchBtn.active").hide();
$(".searchBtn.inactive").show();
}
});

Получение одного и того же результата каждый раз.

Ответ №1:

При циклическом просмотре результатов селектора используйте синтаксис метода:

 $(".searchFormContent input[type=text]").each(...);
  

Синтаксис, который вы использовали, предназначен для перебора массива или объекта.

Смотрите следующую документацию:

Однако вам не нужно использовать .each() при привязке обработчиков событий, методы обработчика событий работают с селектором напрямую:

 $(".searchFormContent input[type=text]").keyup(function() ...);
  

Чтобы решить проблему, с которой вы столкнулись, вам нужно выполнить цикл внутри обработчика событий:

 $(".searchFormContent input[type=text]").keyup(function() {
    var allFilled = true;
    $(".searchFormContent input[type=text]").each(function() {
        if (this.value == '') {
            allFilled = false;
            return false; // End the loop
        }
    });
    $(".searchBtn.inactive").toggle(!allFilled);
    $(".searchBtn.active").toggle(allFilled);
});
  

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

1. Вы пропустили двойную кавычку, я не смог отредактировать только один символ.

2. Спасибо за ввод, но это не решает проблему.

3. Я получаю тот же результат с или без .each

4. Это потому, что вы тестируете только текущий ввод в своем обработчике событий. Я добавил код, который перебирает все входные данные в ответ.

5. ВАУ, большое спасибо за быстрые ответы, ваш код работает отлично!