Cancelar / eliminar window.setTimeout () antes de que ocurra


194

Tengo algunos lugares donde uso la línea de abajo para borrar un estado, por ejemplo. Tengo algunos de estos que se quedan durante 10 segundos o más y si el usuario hace clic alrededor de la acción puede ocurrir a intervalos de tiempo incorrectos.

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

¿Es posible cancelar o eliminar esto con algún código jQuery o JavaScript, por lo que no tengo este proceso?

Respuestas:


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

clearTimeout(timer1)

101
window es solo el nombre del espacio de nombres global, por lo que no es realmente necesario (ya sea para setTimeout o clearTimeout).
Matthew Crumley el

77
Dado que el primer parámetro para setTimeout es una función y 'removeStatusIndicator ()' es una función, puede obtener rendimiento (y escribir menos) simplemente: var timer1 = setTimeout (removeStatusIndicator, statusTimeout); Esto evita las llamadas a funciones anidadas.
HarleyDave

55
y window.clearTimeout(timer1)no funcionará en Node.js. O simplemente use clearTimeout(timer1)oglobal.clearTimeout(timer1)
CL22

2
@ user1944491 No habrá doble invocación: tenga en cuenta que @HarleyDave escribió setTimeout(removeStatusIndicator, ...), es decir, removeStatusIndicatorno se llama a la función .
Frerich Raabe

3
Ignore lo que dice @ user1944491: está mal. La función pasada a setTimeout no se llama dos veces. Chrome no cambió su comportamiento, lo más probable es que te equivocaste llamando a la función en setTimeout( func(), 0 )lugar desetTimeout( func, 0 )
Sethi

2

El window.clearTimeout () debe hacer lo que está tratando de lograr.


66
Explica tu respuesta y da algunos ejemplos. Una buena respuesta siempre tendrá una explicación de lo que se hizo y por qué se hizo de esa manera, no solo para el OP sino para los futuros visitantes de SO.
B001 ᛦ

44
+1 solo porque el comentario anterior me parece absolutamente irrelevante y aleatorio. La respuesta se ve absolutamente bien, se publicó más tarde, por lo que es más como una "copia-pegar" de la respuesta ya proporcionada.
vir us
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.