JavaScript-Timer oder Intervalle, die in einer Schleife mit Abschluss erstellt wurden

8

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?

    
phazei 20.07.2010, 20:28
quelle

3 Antworten

3

Sie sind in einer Schließung, wenn Sie jedes verwenden, Sie haben nur var vergessen, um Ihre Variable im Funktionsumfang

privat zu machen %Vor%     
Andreas Köberle 20.07.2010, 20:34
quelle
4

Habe die Variable 'myID' lokal für die anonyme Funktion,

%Vor%     
Marimuthu Madasamy 20.07.2010 20:32
quelle
1

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.

    
jasongetsdown 20.07.2010 20:45
quelle