Ich muss alle 2000 Millisekunden einen JavaScript-Code ausführen.
setTimeout('moveItem()',2000)
Das Obige führt eine Funktion nach 2000 Millisekunden aus, führt sie jedoch nicht erneut aus.
In meiner moveItem-Funktion habe ich also:
function moveItem() {
jQuery(".stripTransmitter ul li a").trigger('click');
setInterval('moverItem()',2000);
}
Dies funktioniert nicht, da ich den Trigger-Click-jQuery-Code in jedem Intervall von 2000 Millisekunden ausführen möchte, aber im Moment wird er ständig aufgerufen und das Skript muss unterbrochen werden. Abgesehen davon denke ich, dass dies eine sehr schlechte Codierungsqualität ist ... Wie würden Sie das lösen?
javascript
jquery
Marcos Buarque
quelle
quelle
Antworten:
Beachten Sie, dass
setTimeout
undsetInterval
sind sehr unterschiedliche Funktionen:setTimeout
den Code wird ausgeführt , einmal , nach dem Timeout.setInterval
führt den Code für immer in Intervallen des angegebenen Timeouts aus.Beide Funktionen geben eine Timer-ID zurück, mit der Sie das Timeout abbrechen können. Sie müssen diesen Wert lediglich in einer Variablen speichern und als Argument für
clearTimeout(tid)
bzw.clearInterval(tid)
verwenden.Je nachdem, was Sie tun möchten, haben Sie zwei gültige Optionen:
// set timeout var tid = setTimeout(mycode, 2000); function mycode() { // do some stuff... tid = setTimeout(mycode, 2000); // repeat myself } function abortTimer() { // to be called when you want to stop the timer clearTimeout(tid); }
oder
// set interval var tid = setInterval(mycode, 2000); function mycode() { // do some stuff... // no need to recall the function (it's an interval, it'll loop forever) } function abortTimer() { // to be called when you want to stop the timer clearInterval(tid); }
Beides sind sehr gebräuchliche Wege, um dasselbe zu erreichen.
quelle
setTimeout
undsetInterval
, Danke @ Miguel VenturasetInterval(moveItem, 2000);
ist die Möglichkeit, die Funktion
moveItem
alle 2 Sekunden auszuführen . Das Hauptproblem in Ihrem Code besteht darin, dass SiesetInterval
innerhalb und nicht außerhalb des Rückrufs anrufen . Wenn ich verstehe, was Sie versuchen, können Sie Folgendes verwenden:function moveItem() { jQuery('.stripTransmitter ul li a').trigger('click'); } setInterval(moveItem, 2000);
NB: Übergeben Sie keine Zeichenfolgen an
setTimeout
odersetInterval
- die beste Vorgehensweise besteht darin, eine anonyme Funktion oder eine Funktionskennung zu übergeben (wie oben beschrieben). Achten Sie auch darauf, keine einfachen und doppelten Anführungszeichen zu mischen. Wählen Sie eine und bleiben Sie dabei.quelle
Ich glaube, Sie suchen nach setInterval ()
quelle
Es sollte sein:
function moveItem() { jQuery(".stripTransmitter ul li a").trigger('click'); } setInterval(moveItem,2000);
setInterval(f, t)
Ruft die Argumentfunktionf
einmal allet
Millisekunden auf.quelle
Hier die automatische Schleifenfunktion mit HTML-Code. Ich hoffe, dass dies für jemanden nützlich sein kann.
<!DOCTYPE html> <html> <head> <style> div { position: relative; background-color: #abc; width: 40px; height: 40px; float: left; margin: 5px; } </style> <script src="http://code.jquery.com/jquery-latest.js"></script> </head> <body> <p><button id="go">Run »</button></p> <div class="block"></div> <script> function test() { $(".block").animate({left: "+=50", opacity: 1}, 500 ); setTimeout(mycode, 2000); }; $( "#go" ).click(function(){ test(); }); </script> </body> </html>
Geige: DEMO
quelle
Sie sollten so etwas versuchen:
function update(){ i++; document.getElementById('tekst').innerHTML = i; setInterval(update(),1000); }
Dies bedeutet, dass Sie eine Funktion erstellen müssen, in der Sie die erforderlichen Aufgaben ausführen, und sicherstellen müssen, dass sie sich in einem von Ihnen gewünschten Intervall selbst aufruft. Rufen Sie in Ihrem Körper beim Laden die Funktion zum ersten Mal folgendermaßen auf:
<body onload="update()">
quelle
undefined
zu setInterval und rufenupdate()
ohne Pause für immer rekursiv an . (Hinweis: Der Rückgabewert von update () wird hier an setInterval übergeben.)