Ich verwende jQuery, um einen Timer oder eine Intervallschleife für einige Elemente einzurichten, um sie alle paar Sekunden zu überprüfen. Ich habe versucht, einen Timer einzustellen und zu überprüfen, ob ich es neu starten sollte, oder Einstellung und Intervall und überprüfend, ob ich es stoppen sollte.
Obwohl vereinfacht, das ist im Grunde, was ich brauche:
%Vor%Die IDs für Klassenelemente lauten id_1, id_2, id_3. Aber ich bekomme einfach 3 Alarme, die alle ID_3 geben. In meinem Code habe ich angefangen, "dieses" zu übergeben, habe es aber immer weiter vereinfacht, um das Problem herauszufinden.
Wie kann ich die Variable jedes Mal an eine neue Adresse kopieren? Ich weiß, ich brauche Schließungen. Es scheint sich auf das andere var no mater zu beziehen, was.
Ich habe versucht, es zu einer Schleife mit Timern wie folgt zu vereinfachen:
%Vor%Aber ich denke, ich mache mein Problem nur noch schlimmer und das scheint nichts zu tun.
Ich habe nach vorherigen Fragen gesucht, aber die meisten sind mit Tonnen von Extra-Code gefüllt, anstatt das spezifische Problem zu reduzieren und auf andere Weise gelöst zu werden. Ich würde gerne verstehen, wie dies besser funktioniert, indem ich dieses Beispiel zum Laufen bringe. Ich habe es geschafft, während ich dies schreibe herauszufinden, dass ich den Timer mit einer Hilfsfunktion starten kann.
%Vor%Wie kann das ohne das gemacht werden? Gibt es einen besseren Weg?
Sie sind in einer Schließung, wenn Sie jedes verwenden, Sie haben nur var vergessen, um Ihre Variable im Funktionsumfang
privat zu machen %Vor%Habe die Variable 'myID' lokal für die anonyme Funktion,
%Vor% Sie möchten also myFunction
für jedes der übereinstimmenden Elemente alle drei Sekunden ausführen?
Versuchen Sie Folgendes:
%Vor% Wenn die Bedingung in something()
erfüllt ist, sind Sie fertig, wenn nicht, plant die Funktion selbst, in 3 Sekunden mit dem gleichen Element wie zuvor wieder zu laufen. Sie können dies für verschiedene Elemente so oft wie gewünscht aufrufen, jeder Aufruf hat sein eigenes elem
.
Ich bevorzuge es, Objekte wie Elem herumzuführen und die Arbeit mit ihren Interna bis zum letzten möglichen Moment zu verzögern. Lassen Sie something()
sich um die ID oder was auch immer kümmern.
Keine der anderen Gymnastik mit dem assoziativen Array (anstelle von new Array()
könnten Sie einfach {}
verwenden), oder clearInterval
, oder IDs sind notwendig.
Um Ihre Lösung zu adressieren, haben Sie, wie Marimuthu sagte, var
von der Deklaration von myID
entfernt, was bedeutet, dass es global ist und jede Iteration überschrieben wird. Das Ergebnis ist, dass, wenn setInterval
myFunction
aufruft, anstatt eine eindeutige lokale myID
durch Schließen zu erhalten, die globale Variable abgerufen wird, die bereits zu oft überschrieben wurde.
Tags und Links javascript timer loops closures setinterval