al intentar crear una página que muestre la hora actual que se actualizará cada x segundos, x es una entrada del usuario, uso setInterval y clearInterval, pero parece que clearInterval no tiene ningún efecto en absoluto :( aquí está el código:
<script> let changeTime = () => { let secs = document.getElementById("sec").value * 1000; clearInterval(timer); let timer = setInterval(() => { let d = new Date(); document.getElementById("example").innerHTML = d.toLocaleString(); console.log(secs); }, secs); }; function clear() { clearInterval(timer); } //both functions are called with an onChange event¡Gracias!
En primer lugar, let declara una variable como local, por lo que el timer no está visible para clear() . Simplemente elimine let (y no agregue nada más), y la variable se declara como global.
En segundo lugar, aunque clear no es una palabra de JavaScript reservada, en realidad llama al obsoleto document.clear() .
Entonces, cambie su nombre o use window o self para eliminar la ambigüedad.
let changeTime = () => { let secs = 100; timer = setInterval(() => { let d = new Date(); document.getElementById("out").innerHTML = d.toLocaleString(); }, secs); }; function clear() { clearInterval(timer); } changeTime(); </script> <span id="out"></span> <button onclick="self.clear();">clear</button>Su variable de timer es local para su función changeTime() . Declararlo fuera de la función.
let timer; let changeTime = () => { let secs = document.getElementById("sec").value * 1000; clearInterval(timer); timer = setInterval(() => { let d = new Date(); document.getElementById("example").innerHTML = d.toLocaleString(); console.log(secs); }, secs); };Cuando la variable es local para la función, solo existe durante el tiempo en que se realiza una llamada a la función y se crea una nueva instancia de la variable en cada llamada. Al declararla fuera de la función, la variable y su valor persisten.