Beenden einer Schleife mit einem click-Ereignis jQuery
Ich bin auf der Suche nach einem Weg zu stoppen, eine Schleife mit einem click-Ereignis(eine Art Panik-Knopf). Wenn Sie klicken Sie auf die Schaltfläche, es sollte aufhören, sofort.
//grundlegende Idee
$.each(someArray, function(index, value){
setTimeout(function(){
console.log(index);
},5000*index);
});
$('#panic-button').click(function(){
//the code that should stop the looping
}):
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie unterbrechen nicht den
$.each
Schleife mit einemclick
handler sobald die Schleife gestartet wurde. Die Ausführung von JavaScript ist single-threaded, so dass dieclick
handler am besten auf der Warteliste für das nächste mal, wenn der thread frei ist -- nachdem die Schleife beendet wurde.Jedoch als Timer asynchron ausgeführt haben, können Sie diese Abbrechen, indem Sie halten und löschen jede Ihrer IDs:
Wenn Sie möchten, um eine Schleife
in the background
dass Sie kündigen, haben Sie, um zu simulieren, weil js ist im wesentlichen single-threaded ist, und die Schleife wird blockiert, bis er abgeschlossen ist, dann werden Sie in der Lage, auf eine Schaltfläche klicken.Hier ist ein Beispiel, es verwendet, settimeout, um zu simulieren eine Schleife, die abgebrochen werden können durch einen Klick
FIDDLE
Erstellen, die die Funktion zurückgeben einen Wert außerhalb des $.jedes (), und verwenden einer flag-variable, um zu bestimmen, ob oder nicht die Taste, auf die geklickt wurde. Ich in der Regel deklarieren Sie die globalen Funktionen und Variablen, die mit "Fenster".
Habe ich die for-Schleife gegeben, die von Jonathan Lonowski in meinem edit. Die Idee ist ähnlich, außer, dass müssten Sie eine zusätzliche variable, um zu verhindern, dass Ihre erste Schleife ausgeführt wird. Tut dies Ihr problem lösen ?
Du bist Antwort ist sehr einfach:
Hinzufügen
var $theTimeout =
vorsetTimeout
und klar, dass es in Ihremclick
handler:clearTimeout($theTimeout)
.http://www.w3schools.com/js/js_timing.asp
each
konstruieren. Sie müssten, um Sie zu speichern in einem array und clearTimeout auf alle von Ihnen