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?

Toran Billups
fuente

Respuestas:

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

clearTimeout(timer1)
Diodeus - James MacFarlane
fuente
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.

Florin Toader
fuente
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