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"){returnfalse;// breaks}});// or
$(selector).each(function(){if(condition){returnfalse;}});
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.
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;
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;returnfalse;}});if(breakOut){
breakOut =false;returnfalse;}
"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.
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){returntrue;}}}
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;returnfalse;//This will only exit the anonymous function and stop the iteration immediatelly.}});return result;//This will exit the function with return true;}
return false
an der falschen Stelle platziert. Als ich es reparierte, funktionierte alles.return false
nicht funktioniert$().each
- weil es funktioniert.Antworten:
Zu
break
einer$.each
oder-$(selector).each
Schleife müssen Siefalse
im Schleifenrückruf zurückkehren.Das Zurückspringen
true
springt zur nächsten Iteration, was acontinue
in einer normalen Schleife entspricht.quelle
false
in the loop callback"? Wo genau ist das?$.each(array, function(key, value) { if(value == "foo") return false; });
$().each
erfolgt genauso, Ihre Bearbeitung sorgt nur für Verwirrung.Laut Dokumentation
return false;
sollte die Arbeit erledigen.Geben Sie im Rückruf false zurück:
Übrigens
continue
funktioniert so:quelle
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/
quelle
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.
quelle
"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.
quelle
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.
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.
quelle