Jak wyjść z jQuery każdej pętli

676

Jak wyjść z eachpętli jQuery ?

Próbowałem:

 return false;

W pętli, ale to nie działało. Jakieś pomysły?

Luke101
źródło
11
Dla potomnych: dlaczego pytający powiedział, że zwracanie wartości false nie działa? Praktycznie każda odpowiedź mówi, aby to zrobić. Zastanawiasz się, czy to możliwe, ponieważ to tylko kończy każdą pętlę. Natomiast instrukcja return wewnątrz pętli for kończy wyjście z pętli i funkcji wywołującej . Aby uzyskać tak drastyczne zachowanie z każdej pętli, musisz ustawić flagę z zakresem zamknięcia w każdej pętli, a następnie zareagować na flagę poza nią.
Bob Stein
8
@ BobStein-VisiBone Ktoś usunął mój oryginalny komentarz. Umieściłem return falseniewłaściwe miejsce. Kiedy to naprawiłem, wszystko działało.
Łuk
1
nie jestem pewien, dlaczego „aktualizacja” mówi, return falseże nie działa $().each- ponieważ tak jest.
billynoah
2
@ Luke101 powinieneś zaktualizować pytanie, aby wyjaśnić, co nie działa. To pytanie nie ma sensu, gdy twoje pytanie mówi, że zaakceptowana odpowiedź nie działa.
xr280xr

Odpowiedzi:

1179

Aby breaksię $.eachlub $(selector).eachpętli, trzeba wrócić falsedo zwrotnego pętli.

Powrót trueprzeskakuje do następnej iteracji, równoważnej a continuew normalnej pętli.

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

// or

$(selector).each(function() {
  if (condition) {
    return false;
  }
});
CMS
źródło
3
Właśnie tego szukałem, dzięki. @OZZIE, po prostu użyj „return true;” lub „return false;” na podstawie twoich warunków.
dchayka
2
Co @CMS oznacza „powrót falsew pętli zwrotnej”? Gdzie to dokładnie jest?
mesqueeb
Np.$.each(array, function(key, value) { if(value == "foo") return false; });
SteveEdson
1
Nie wiem, jQuery musiał zamienić pozycje parametrów z javascript forEach.
Mikee
1
@AlexR Wyłamanie się z $().eachodbywa się dokładnie w ten sam sposób, twoja edycja służy tylko do spowodowania zamieszania.
Jake
57

Zgodnie z dokumentacją return false;należy wykonać zadanie.

Możemy przerwać pętlę $ .each () [..], ustawiając funkcję zwrotną na false.

Zwróć false w wywołaniu zwrotnym:

function callback(indexInArray, valueOfElement) {
  var booleanKeepGoing;

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

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

BTW, continuedziała tak:

Zwracanie wartości innej niż false jest takie samo, jak instrukcja continu w pętli for; przejdzie natychmiast do następnej iteracji.

powtac
źródło
35

Utworzyłem skrzypek dla odpowiedzi na to pytanie, ponieważ zaakceptowana odpowiedź jest nieprawidłowa, a także jest to pierwszy wątek StackOverflow zwrócony przez Google w związku z tym pytaniem.

Aby wyrwać się z każdego $ $ musisz użyć return false;

Oto Fiddle, który to potwierdza:

http://jsfiddle.net/9XqRy/

iamjpg
źródło
14
Lubię skrzypce, ale nie jestem pewien, dlaczego mówisz, że zaakceptowana odpowiedź jest nieprawidłowa, ponieważ oboje mówicie to samo.
gitsitgo
34

Natknąłem się na sytuację, w której spełniłem warunek, który spowodował przerwanie pętli, jednak kod po funkcji .each () nadal był wykonywany. Następnie ustawiam flagę na „true”, natychmiast sprawdzając flagę po funkcji .each (), aby upewnić się, że kod, który nastąpił, nie został wykonany.

$('.groupName').each(function() {
    if($(this).text() == groupname){
        alert('This group already exists');
        breakOut = true;
        return false;
    }
});
if(breakOut) {
    breakOut = false;
    return false;
} 
David Aguirre
źródło
7

„każdy” używa funkcji oddzwaniania. Funkcja oddzwaniania jest wykonywana niezależnie od funkcji wywoływania, więc powrót do funkcji wywoływania z funkcji oddzwaniania nie jest możliwy.

użyj dla pętli, jeśli musisz zatrzymać wykonywanie pętli na podstawie pewnych warunków i pozostać przy tej samej funkcji.

Sumit Jambhale
źródło
6

Wiem, że to dość stare pytanie, ale nie widziałem żadnej odpowiedzi, która wyjaśniałaby, dlaczego i kiedy można zerwać ze zwrotem.

Chciałbym wyjaśnić to dwoma prostymi przykładami:

1. Przykład: W tym przypadku mamy prostą iterację i chcemy zerwać z wartością true, jeśli uda nam się znaleźć trzy.

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

jeśli wywołamy tę funkcję, po prostu zwróci prawdę.

2. Przykład W tym przypadku chcemy iterować z każdą funkcją jquery , która przyjmuje jako parametr funkcję anonimową.

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;
}
Vural
źródło