2013-01-10 7 views
6

Ich weiß, mit Kern Javascript wir Dinge wie diese tun können:Verwendung von break und continue in jQuery

for(i=1;i<10;i++){ 
    if(i==5){ 
    //break or continue 
    } 
} 

Aber warum ist dies nicht korrekt?

$.each(iteratorarray,function(i){ //iteratorarray - just an array 
    if(i==5){ 
    //break or continue,will cause error here 
    } 
}); 
+0

Haben Sie [die Dokumente] (http://api.jquery.com/each/) gelesen? – Bergi

+0

Das ist genau so Kern-Javascript wie das erste, es ist eine normale Funktion. – Esailija

Antwort

8

Dieses Verhalten ist, was von jQuery implementiert wird. Dies ist, was jQuery api Dokument sagen: "Wir können break die $ .Each() Schleife bei einer bestimmten Iteration, indem Sie die Callback-Funktion false zurückgeben. Returning non-false ist das gleiche wie eine continue Anweisung in einer for-Schleife; es wird sofort auf die nächste Iteration ", können Sie darüber lesen here.

3

return fortsetzen wird, wird return false brechen. Die documentation spricht über die break stellvertretend durch Beispiel, aber es gibt immer noch die Funktionalität von return in der .each Callback.

+0

danke mann + 1ed für die Mühe! – coolguy

1

Im $.each Fall gibt es keine Schleife, aus der Sie ausbrechen können, und deshalb erhalten Sie den Fehler. Die Art, wie jQuery es tut, ist jedoch, dass die Schleife breaks, wenn Ihre Funktion false zurückgibt.

+0

danke mann + 1ed für die Mühe! – coolguy

1

Sie können auch die JavaScript-Methode every zum Iterieren von Array-Elementen verwenden.

Die jede Methode ruft die Funktion callbackfn einmal für jedes Element Array, in aufsteigender Reihenfolge Index, bis die Funktion callbackfn FALSCH. Wenn ein Element, das bewirkt, dass Callbackfn false zurückgibt, gefunden wird, gibt jede Methode sofort false zurück. Andernfalls gibt jede Methode true zurück.

+0

danke mann + 1ed für die Mühe! – coolguy

2

Warum ist das nicht korrekt?

break oder continue Aussagen sind nur als Teil eines gültigen (for- für-in-, while, ...) loop statement. Sie können das nicht in einer einfachen Funktion tun. Von der Spezifikation:

Ein Programm angesehen wird syntaktisch falsch, wenn [...] das Programm eine/break-Anweisung weiterhin enthält [...] direkt oder indirekt (aber nicht Funktion Grenzen überqueren), innerhalb eines IterationStatement.

Stattdessen können Sie return von einer Funktion (die weitere Ausführung des Funktionskörpers bricht). Wie Sie in the documentation lesen können, stoppt false die Iteration in $.each.

+0

break kann durch 'return false' implementiert werden, was ist mit' continue' – coolguy

+0

Nur 'Rückkehr' vorzeitig aus dem Körper der Funktion. – Bergi

+0

danke mann + 1ed für die Mühe! – coolguy

2

$.each verwendet einen Rückruf, um den benutzerdefinierten Code auszuführen, break ist eine Steueranweisung, die die Umbruchschleife unterbrechen kann. Die break oder continue muss direkt von der loop Stelle aufgerufen werden, nicht von einer delegierten Funktion.

$.each(iteratorarray,function(i){ //iteratorarray - just an array 
    if(i==5){ 
    //break or continue,will cause error here 
    } 
}); 

kann in Betracht gezogen werden, wie gleich zu

for(i=0;i<iteratorarray.length;i++){ 
    if(callback(i, iteratorarray[i]) === false){ 
     break; 
    } 
} 

Hier der Code innerhalb der callback() Funktion mit Wohnsitz daher können Sie nicht loop control Anweisungen innerhalb der Callback verwenden.

Sie können mehr in der documentation lesen.

+0

danke mann + 1ed für die Mühe! – coolguy

Verwandte Themen