Cancele / mate window.setTimeout () antes que aconteça

194

Eu tenho alguns lugares onde uso a linha abaixo para limpar um status, por exemplo. Eu tenho alguns deles que ficam por 10 segundos ou mais e se o usuário clicar na ação pode ocorrer em intervalos de tempo incorretos.

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

É possível cancelar ou eliminar isso com algum código jQuery ou JavaScript, para que eu não tenha esse processo por aí?

Toran Billups
fonte

Respostas:

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

clearTimeout(timer1)
Diodeus - James MacFarlane
fonte
101
window é apenas o nome do espaço para nome global; portanto, não é realmente necessário (para setTimeout ou clearTimeout).
Matthew Crumley
7
Como o primeiro parâmetro para setTimeout é uma função e 'removeStatusIndicator ()' é uma função, você pode obter desempenho (e digitar menos) simplesmente: var timer1 = setTimeout (removeStatusIndicator, statusTimeout); Isso evita as chamadas de função aninhadas.
HarleyDave
5
e window.clearTimeout(timer1)não funcionará no Node.js. Basta usar clearTimeout(timer1)ouglobal.clearTimeout(timer1)
CL22
2
@ user1944491 Não haverá dupla invocação: observe que @HarleyDave escreveu setTimeout(removeStatusIndicator, ...), ou seja, a função removeStatusIndicatornão é chamada.
Frerich Raabe
3
Ignore o que @ user1944491 está dizendo - está errado. A função passada para setTimeout não é chamada duas vezes. O Chrome não mudou seu comportamento, mais provavelmente você errou chamando a função em setTimeout( func(), 0 )vez desetTimeout( func, 0 )
Sethi 19/03
2

O window.clearTimeout () deve fazer o que você está tentando alcançar.

Florin Toader
fonte
6
Por favor, explique sua resposta e dê alguns exemplos. Uma boa resposta sempre terá uma explicação do que foi feito e por que foi feito dessa maneira, não apenas para o OP, mas para futuros visitantes do SO.
B001 #
4
+1 apenas porque o comentário acima parece absolutamente irrelevante e aleatório para mim. A resposta parece absolutamente correta, foi postada mais tarde, então é mais como uma "copiar e colar" da resposta já fornecida.
vir us 29/03