Как выйти из функции события jQuery click изнутри $ .each

Sami Al-Subhi спросил: 28 марта 2018 в 03:54 в: javascript

Как я могу существовать из всей функции события jquery click, если условие выполняется внутри $.each. Одним из решений будет сохранение результата условия в переменной, а затем после цикла будет выполняться оператор if, но нет прямого пути?

$(".main").on("click",".button",function(e){    $(this).siblings('input').each(function(){       if($(this).val() == 'yourvalue') {
         return false;
       }    });    //......rest of the code runs if the above condition is NOT met });

4 ответа

Есть решение
T.J. Crowder ответил: 29 марта 2018 в 06:46

Как вырваться из функции события jQuery click изнутри $ .each

Итак, вы хотите return false из click Обработчик основан на результате внутреннего цикла. У вас есть несколько вариантов:

  1. Использовать простой цикл for [как в вашем ответе]

  2. Использовать get, чтобы получить массив для входных данных, и использовать Array#some:

    $(".main").on("click", ".button", function(e) {
        if ($(this).siblings('input').get().some(function(input) { return input.value == 'yourvalue'; })) {
            return false;
        }    //...
    });
    

    , что более кратко с функцией стрелки ES2015 +:

    $(".main").on("click", ".button", function(e) {
        if ($(this).siblings('input').get().some(input => input.value == 'yourvalue')) {
            return false;
        }    //...
    });
    
  3. Использовать флаг вне цикла:

    $(".main").on("click", ".button", function(e) {
        var flag = false;
        $(this).siblings('input').each(function() {
            if ($(this).val() == 'yourvalue') { // can use this.value instead of $(this).val() here
                flag = true;
                return false; // Breaks the `each` loop
            }
        });
        if (flag) {
            return false;
        }    //...
    });
    
Jake Miller ответил: 28 марта 2018 в 03:59

То, что у вас есть, должно работать. Чтобы разорвать цикл $ .each, вам просто нужно вернуть false.

Возвращение true пропускает до следующей итерации, эквивалентно продолжению в нормальном цикле.

$(".main").on("click",".button",function(e){    $.each(array, function(i){       if(i === 'yourvalue') {
         return false; // will exit the $.each loop
       }    }); });
Sami Al-Subhi ответил: 28 марта 2018 в 04:12

Преобразование в собственный цикл позволит мне использовать функцию щелчка при использовании return false

$(".main").on("click",".button",function(e){   var inputs = $(this).siblings('input')   for(var x = 0; x < inputs.length; x++){     if(inputs.eq(x).val() == 'yourvalue') {
       return false;
     }   }//......rest of the code runs if the above condition is NOT met});
Ludovit Mydla ответил: 28 марта 2018 в 03:59

jQuery doc: "Мы можем разорвать цикл $ .each () на определенной итерации, заставив функцию обратного вызова вернуть false. Возвращение не-false - это то же самое, что и оператор continue в цикле for; он будет сразу пропущен до следующая итерация."