Estoy usando setInterval(fname, 10000);
para llamar a una función cada 10 segundos en JavaScript. ¿Es posible dejar de llamarlo en algún evento?
Quiero que el usuario pueda detener la actualización repetida de datos.
Estoy usando setInterval(fname, 10000);
para llamar a una función cada 10 segundos en JavaScript. ¿Es posible dejar de llamarlo en algún evento?
Quiero que el usuario pueda detener la actualización repetida de datos.
setInterval()
devuelve una ID de intervalo, que puede pasar a clearInterval()
:
var refreshIntervalId = setInterval(fname, 10000);
/* later */
clearInterval(refreshIntervalId);
Ver los documentos para setInterval()
y clearInterval()
.
clearInterval
. He usado enwindow.refreshIntervalId
lugar de una variable local, ¡y funciona muy bien!$('foo').data('interval', setInterval(fn, 100));
y luego lo borré conclearInterval($('foo').data('interval'));
Estoy seguro de que también hay una forma no jQuery para hacerlo.Si establece el valor de retorno de
setInterval
una variable, puede usarclearInterval
para detenerlo.fuente
Puede establecer una nueva variable y aumentarla en ++ (cuente hasta una) cada vez que se ejecute, luego uso una instrucción condicional para finalizarla:
Espero que ayude y sea correcto.
fuente
clearInterval(varName);
. EsperabaclearInterval
no funcionar cuando pasaba el nombre de la función, pensé que requería la identificación del intervalo. Supongo que esto solo puede funcionar si tiene una función con nombre, ya que no puede pasar una función anónima como una variable dentro de sí misma.$(document).ready(function(){ });
es jQuery, por eso no funciona. Esto debería haber sido mencionado al menos.varName
, que almacena una función sin nombre , ¿qué? Deberías cambiar o anular esta respuesta, en mi humilde opinión.Las respuestas anteriores ya explicaron cómo setInterval devuelve un controlador y cómo se utiliza este controlador para cancelar el temporizador de intervalo.
Algunas consideraciones arquitectónicas:
Por favor, no use variables "sin alcance". La forma más segura es usar el atributo de un objeto DOM. El lugar más fácil sería "documento". Si la actualización se inicia con un botón de inicio / parada, puede usar el botón en sí:
Dado que la función se define dentro del controlador de clic de botón, no tiene que definirla nuevamente. El temporizador se puede reanudar si se vuelve a hacer clic en el botón.
fuente
document
que enwindow
?Ya respondí ... Pero si necesita un temporizador destacado y reutilizable que también sea compatible con múltiples tareas en diferentes intervalos, puede usar mi TaskTimer (para Node y navegador).
En su caso, cuando los usuarios hacen clic para alterar la actualización de datos; También puede llamar
timer.pause()
a continuación,timer.resume()
si tienen que volver a habilitar.Ver más aquí .
fuente
El método clearInterval () se puede usar para borrar un conjunto de temporizadores con el método setInterval ().
setInterval siempre devuelve un valor de ID. Este valor se puede pasar en clearInterval () para detener el temporizador. Aquí hay un ejemplo de temporizador que comienza desde 30 y se detiene cuando se convierte en 0.
fuente
@cnu,
Puede detener el intervalo, cuando intente ejecutar el código antes de buscar su navegador de consola (F12) ... intente comentar clearInterval (trigger) es buscar nuevamente una consola, no un embellecedor? :PAGS
Consulte el ejemplo de una fuente:
fuente
Declare la variable para asignar el valor devuelto por setInterval (...) y pase la variable asignada a clearInterval ();
p.ej
// En cualquier lugar al que tenga acceso al temporizador declarado anteriormente, llame a clearInterval
fuente
También puede detener el intervalo agregando un detector de eventos a, digamos, un botón con el ID "intervalo de detención":
HTML:
Nota: El intervalo se seguirá ejecutando, sin embargo, no pasará nada.
fuente
Así es como utilicé el método clearInterval () para detener el temporizador después de 10 segundos.
fuente
Use setTimeOut para detener el intervalo después de un tiempo.
fuente
Supongo que el siguiente código ayudará:
Hiciste el código 100% correcto ... Entonces ... ¿Cuál es el problema? O es un tutorial ...
fuente
¿Por qué no usar un enfoque más simple? Añadir una clase!
Simplemente agregue una clase que le diga al intervalo que no haga nada. Por ejemplo: en vuelo estacionario.
He estado buscando este enfoque rápido y fácil durante años, por lo que publico varias versiones para presentarle a la mayor cantidad de personas posible.
fuente
this.setInterval(function() { if(!$('#counter').hasClass('pauseInterval')) { //do something } }, 500);
es todo lo que tienes para el código. Además, el cheque es lo primero que debe hacer, por lo que es muy liviano cuando está suspendido. Para eso es esto: pausar temporalmente una función . Si desea terminarlo indefinidamente: por supuesto, elimina el intervalo.