Як вирватися з jQuery кожної петлі


676

Як вийти з eachциклу jQuery ?

Я намагався:

 return false;

У циклі, але це не спрацювало. Будь-які ідеї?


11
Для нащадків: чому запитуючий сказав, що повернути неправду не вийшло? Практично кожна відповідь говорить про це. Цікаво, чи це можливо тому, що це лише припиняє кожен цикл. Оператор повернення всередині циклу for-циклу, навпаки, вийшов би з циклу та функції виклику . Щоб отримати таку різку поведінку з кожного циклу, вам потрібно буде встановити прапор із рамкою закриття всередині кожного циклу, а потім відповісти на прапор поза ним.
Боб Штейн

8
@ BobStein-VisiBone Хтось видалив мій оригінальний коментар. Я поставив return falseнеправильне місце. Коли я зафіксував це, все спрацювало.
Лука101

1
не впевнений, чому "оновлення" говорить, return falseщо не працює $().each- тому що це так.
billynoah

2
@ Luke101 вам слід оновити питання, щоб зрозуміти, що не працює. Це питання не має сенсу, коли у вашому запитанні сказано, що прийнята відповідь не працює.
xr280xr

Відповіді:


1179

Для breakбільш $.eachабо $(selector).eachпетлі, ви повинні повернутися falseдо функцій зворотного виклику циклу.

Повернення trueпереходить до наступної ітерації, еквівалентної а continueв звичайному циклі.

$.each(array, function(key, value) { 
    if(value === "foo") {
        return false; // breaks
    }
});

// or

$(selector).each(function() {
  if (condition) {
    return false;
  }
});

3
Просто те, що я шукав, дякую. @OZZIE, просто використовуй "return true;" або "повернути помилкове;" виходячи з ваших умов.
дчайка

2
Що означає @CMS "повернення falseв циклі зворотного виклику." Де саме це?
mesqueeb

Напр.$.each(array, function(key, value) { if(value == "foo") return false; });
SteveEdson

1
Не знаю, jQuery повинен був поміняти положення параметрів з javascript forEach.
Майк

1
@AlexR Вихід із "a" $().eachробиться точно так само, ваша редакція служить лише для плутанини.
Джейк

57

Згідно з документацією return false;слід виконати роботу.

Ми можемо зламати цикл $ .each () [..], зробивши функцію зворотного виклику поверненням помилковою.

Повернути помилку в зворотному дзвінку:

function callback(indexInArray, valueOfElement) {
  var booleanKeepGoing;

  this; // == valueOfElement (casted to Object)

  return booleanKeepGoing; // optional, unless false 
                           // and want to stop looping
}

До речі, continueпрацює так:

Повернення non-false - це те саме, що оператор продовження у циклі for; вона перейде негайно до наступної ітерації.


35

Я створив Fiddle для відповіді на це запитання, оскільки прийнята відповідь невірна, плюс це перший потік StackOverflow, який повернувся з Google щодо цього питання.

Щоб вирватися з $ .each, ви повинні використовувати return false;

Ось Fiddle, що підтверджує це:

http://jsfiddle.net/9XqRy/


14
Мені подобається загадка, але я не впевнений, чому ти кажеш, що прийнята відповідь є невірною, тому що ви обидва говорите одне і те ж.
gitsitgo

34

Я натрапив на ситуацію, коли я зустрів умову, яка порушила цикл, проте код після функції .each () все ще виконується. Потім я встановив прапор "true", негайно перевіривши прапор після функції .each (), щоб переконатися, що наступний код не був виконаний.

$('.groupName').each(function() {
    if($(this).text() == groupname){
        alert('This group already exists');
        breakOut = true;
        return false;
    }
});
if(breakOut) {
    breakOut = false;
    return false;
} 

7

"кожен" використовує функцію зворотного дзвінка. Функція зворотного дзвінка виконується незалежно від функції виклику, тому повернутися до функції виклику з функції зворотного дзвінка неможливо.

використовувати для циклу, якщо вам доведеться зупинити виконання циклу на основі якоїсь умови та залишитися в тій самій функції.


6

Я знаю його досить давнє запитання, але я не побачив жодної відповіді, яка б пояснила, чому і коли можна розірватися із поверненням.

Я б хотів пояснити це двома простими прикладами:

1. Приклад. У цьому випадку ми маємо просту ітерацію, і ми хочемо розірвати з поверненням true, якщо зможемо знайти три.

function canFindThree() {
    for(var i = 0; i < 5; i++) {
        if(i === 3) {
           return true;
        }
    }
}

якщо ми називаємо цю функцію, вона просто поверне справжню.

2. Приклад У цьому випадку ми хочемо повторити кожну функцію jquery , яка приймає анонімну функцію як параметр.

function canFindThree() {

    var result = false;

    $.each([1, 2, 3, 4, 5], function(key, value) { 
        if(value === 3) {
            result = true;
            return false; //This will only exit the anonymous function and stop the iteration immediatelly.
        }
    });

    return result; //This will exit the function with return true;
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.