Annulla / uccidi window.setTimeout () prima che accada


194

Ho alcuni posti in cui utilizzo la riga seguente per cancellare uno stato, ad esempio. Ne ho alcuni che restano in sospeso per 10 secondi o più e se l'utente fa clic sull'azione può verificarsi a intervalli di tempo errati.

window.setTimeout(function() { removeStatusIndicator(); }, statusTimeout);

È possibile annullare o eliminare questo con un po 'di codice jQuery o JavaScript, quindi non ho questo processo in sospeso?

Risposte:


376
var timer1 = setTimeout(function() { removeStatusIndicator(); }, statusTimeout);

clearTimeout(timer1)

101
window è solo il nome dello spazio dei nomi globale, quindi non è realmente necessario (per setTimeout o clearTimeout).
Matthew Crumley,

7
Poiché il primo parametro per setTimeout è una funzione e 'removeStatusIndicator ()' è una funzione, è possibile ottenere prestazioni (e digitare meno) semplicemente: var timer1 = setTimeout (removeStatusIndicator, statusTimeout); Ciò evita le chiamate di funzione nidificate.
HarleyDave,

5
e window.clearTimeout(timer1)non funzionerà in Node.js. O basta usare clearTimeout(timer1)oglobal.clearTimeout(timer1)
CL22 l'

2
@ user1944491 Non ci sarà una doppia invocazione: nota che @HarleyDave ha scritto setTimeout(removeStatusIndicator, ...), cioè la funzione removeStatusIndicatornon viene chiamata.
Frerich Raabe,

3
Ignora ciò che @ user1944491 sta dicendo: è sbagliato. La funzione passata a setTimeout non viene chiamata due volte. Chrome non ha cambiato il suo comportamento, molto probabilmente hai rovinato chiamando la funzione setTimeout( func(), 0 )piuttosto chesetTimeout( func, 0 )
Sethi il

2

Window.clearTimeout () dovrebbe fare ciò che stai cercando di ottenere.


6
Spiega la tua risposta e fornisci alcuni esempi. Una buona risposta avrà sempre una spiegazione di ciò che è stato fatto e del perché è stato fatto in questo modo, non solo per l'OP ma anche per i futuri visitatori di SO.
B001 ᛦ

4
+1 solo perché il commento sopra sembra assolutamente irrilevante e casuale per me. La risposta sembra assolutamente soddisfacente, è stata pubblicata più tardi, quindi è più simile a una "copia-incolla" della risposta già fornita.
vir us
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.