So brechen Sie jede Schleife aus jQuery aus

674

Wie breche ich aus einer jQuery- eachSchleife aus?

Ich habe versucht:

 return false;

In der Schleife hat das aber nicht funktioniert. Irgendwelche Ideen?

Luke101
quelle
10
Für die Nachwelt: Warum hat der Fragesteller gesagt, dass die Rückgabe von false nicht funktioniert hat? Praktisch jede Antwort sagt, dass man das tun soll. Ich frage mich, ob es möglicherweise daran lag, dass dadurch nur die einzelnen Schleifen beendet werden. Eine return-Anweisung innerhalb einer for-Schleife würde dagegen die Schleife und die aufrufende Funktion verlassen . Um solch drastisches Verhalten von jeder Schleife zu erhalten, müssen Sie ein Flag mit Schließbereich innerhalb jeder Schleife setzen und dann auf das Flag außerhalb dieser Schleife reagieren.
Bob Stein
7
@ BobStein-VisiBone Jemand hat meinen ursprünglichen Kommentar gelöscht. Ich habe das return falsean der falschen Stelle platziert. Als ich es reparierte, funktionierte alles.
Luke101
1
Ich bin mir nicht sicher, warum das "Update" return falsenicht funktioniert $().each- weil es funktioniert.
Billynoah
2
@ Luke101 Du solltest die Frage aktualisieren, um klar zu machen, was nicht funktioniert hat. Diese Frage / Antwort macht keinen Sinn, wenn Ihre Frage besagt, dass die akzeptierte Antwort nicht funktioniert.
xr280xr

Antworten:

1176

Zu breakeiner $.eachoder- $(selector).eachSchleife müssen Sie falseim Schleifenrückruf zurückkehren.

Das Zurückspringen truespringt zur nächsten Iteration, was a continuein einer normalen Schleife entspricht.

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

// or

$(selector).each(function() {
  if (condition) {
    return false;
  }
});
CMS
quelle
3
Genau das, wonach ich gesucht habe, danke. @OZZIE, benutze einfach "return true;" oder "return false;" basierend auf Ihren Bedingungen.
Dchayka
2
Was bedeutet @CMS mit "return falsein the loop callback"? Wo genau ist das?
Mesqueeb
ZB$.each(array, function(key, value) { if(value == "foo") return false; });
SteveEdson
1
Ich weiß nicht, dass jQuery Parameterpositionen aus dem Javascript für jeden austauschen musste.
Mikee
1
@AlexR Das Ausbrechen von a $().eacherfolgt genauso, Ihre Bearbeitung sorgt nur für Verwirrung.
Jake
57

Laut Dokumentation return false;sollte die Arbeit erledigen.

Wir können die $ .each () -Schleife [..] unterbrechen, indem wir die Rückruffunktion auf false zurückgeben.

Geben Sie im Rückruf false zurück:

function callback(indexInArray, valueOfElement) {
  var booleanKeepGoing;

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

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

Übrigens continuefunktioniert so:

Die Rückgabe von non-false entspricht einer continue-Anweisung in einer for-Schleife. Es wird sofort zur nächsten Iteration gesprungen.

powtac
quelle
35

Ich habe eine Geige für die Antwort auf diese Frage erstellt, da die akzeptierte Antwort falsch ist. Dies ist der erste StackOverflow-Thread, der von Google zu dieser Frage zurückgegeben wurde.

Um aus einem $ .each auszubrechen, müssen Sie verwenden return false;

Hier ist eine Geige, die es beweist:

http://jsfiddle.net/9XqRy/

iamjpg
quelle
14
Ich mag die Geige, aber ich bin mir nicht sicher, warum Sie sagen, dass die akzeptierte Antwort falsch ist, weil Sie beide dasselbe sagen.
Gititgo
34

Ich bin auf die Situation gestoßen, in der ich eine Bedingung erfüllt habe, die die Schleife unterbrochen hat, der Code nach der Funktion .each () jedoch weiterhin ausgeführt wurde. Ich habe dann ein Flag auf "true" gesetzt und sofort nach der Funktion .each () nach dem Flag gesucht, um sicherzustellen, dass der folgende Code nicht ausgeführt wurde.

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

"each" verwendet die Rückruffunktion. Die Rückruffunktion wird unabhängig von der aufrufenden Funktion ausgeführt, sodass es nicht möglich ist, von der Rückruffunktion zur aufrufenden Funktion zurückzukehren.

Verwenden Sie for loop, wenn Sie die Ausführung der Schleife unter bestimmten Bedingungen stoppen und in derselben Funktion bleiben müssen.

Sumit Jambhale
quelle
6

Ich weiß, dass es eine ziemlich alte Frage ist, aber ich habe keine Antwort gesehen, die klarstellt, warum und wann es möglich ist, mit der Rückkehr zu brechen.

Ich möchte es mit 2 einfachen Beispielen erklären:

1. Beispiel: In diesem Fall haben wir eine einfache Iteration und möchten mit return true brechen, wenn wir die drei finden können.

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

Wenn wir diese Funktion aufrufen, wird einfach das true zurückgegeben.

2. Beispiel In diesem Fall möchten wir mit jeder Funktion von jquery iterieren , die eine anonyme Funktion als Parameter verwendet.

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
quelle