2010-04-05 9 views
25

Ich habe ein kleines jQuery-Snippet, das eine Benachrichtigung oben auf dem Bildschirm als Reaktion auf Benutzeraktionen auf einer Seite anzeigt. Die Benachrichtigung wird oft nach Ajax-Aktionen mit dynamischem Inhalt angezeigt.Wie kann ich eine Jquery TimeOut-Funktion stoppen/überschreiben?

Zum Beispiel:

$("#mini-txt").html("Thank you!"); 
$("#mini").fadeIn("fast"); 
setTimeout(function() {$("#mini").animate({height: "hide", opacity: "hide"}, "medium");}, 3000); 

Die Benachrichtigung funktioniert gut, außer wenn ein Nutzer zwei oder mehr Aktionen in schnellen Folge, in welchem ​​Fall die TimeOut Funktion selbst verwirren und die zweite Nachricht erscheint innerhalb der kommenden vorherige 3000 Millisekunden.

Gibt es eine Möglichkeit, die vorherige Benachrichtigung zu "killen", wenn eine neue Aktion ausgeführt wird. Ich habe kein Problem mit den Aktionen/Selektoren, nur die TimeOut-Funktion .... entweder stoppen oder irgendwie übersteuern. Oder gibt es eine bessere Alternative, um die Nachricht für ein paar Sekunden auf dem Bildschirm zu halten, bevor sie verschwindet?

Vielen Dank.

Antwort

56

Zuerst speichern Sie den Rückgabewert für die setTimeout Funktion:

// Set the timeout 
var timeout = setTimeout(function() 
    { 
     // Your function here 
    }, 2000); 

Dann, wenn Sie bereit sind, den Timeout zu töten ... Sie rufen Sie einfach clearTimeout mit dem gespeicherten Wert aus dem vorherigen Anruf an setTimeout.

// Then clearn the timeout 
clearTimeout(timeout); 
+0

wird es die Timeout-Funktion nach dem Löschen ausführen? – sbs

6

können Sie verwenden .stop()

Stoppen Sie die aktuell laufenden Animation auf den angepassten Elementen.

6

jQuery 1.4 ist ein in Verfahren gebaut zu handhaben Verzögerungen für Animationen Sie etwas tun können:

$("#mini-txt").html("Thank you!"); 
$("#mini").fadeIn("fast").delay(3000).animate({height: "hide", opacity: "hide"}, "medium"); 

Und dann später, wenn Sie die Animation Warteschlange reinigen möchten Sie tun können:

$("#mini").stop(true); 
0

Dies wird mit einer Verzögerung von 500 ms Timeout nach Funktion Lauf löschen

var timeout = setTimeout(function(){ 

/* YOUR FUNCTION */ 

}, 500, function(){ 
    clearTimeout(timeout); 
}); 
Verwandte Themen