2010-05-07 11 views
10

Entonces, obtuve un bucle infinito para trabajar en esta función usando setInterval conectado a un onClick. El problema es que no puedo detenerlo usando clearInterval en un onClick. Creo que esto se debe a que cuando adjunto un clearInterval a un onClick, mata un intervalo específico y no la función por completo. ¿Hay algo que pueda hacer para matar todos los intervalos a través de un onClick?¿Hay alguna manera de matar un loop setInterval a través de un botón Onclick?

Aquí es mi .js file y las llamadas que estoy haciendo son

input type="button" value="generate" onClick="generation(); 

input type="button" value="Infinite Loop!" onclick="setInterval('generation()',1000);" 

input type="button" value="Reset" onclick="clearInterval(generation(),80;" // This one here is giving me trouble. 

Respuesta

-1

Tener generation(); llamada setTimeout a sí mismo en lugar de setInterval. Eso fue lo que puede usar un poco si la lógica en la función para evitar que se ejecute setTimeout con bastante facilidad.

var genTimer 
var stopGen = 0 

function generation() { 
    clearTimeout(genTimer) ///stop additional clicks from initiating more timers 
    . . . 
    if(!stopGen) { 
     genTimer = setTimeout(function(){generation()},1000) 
    } 
} 

}

+0

Esto no responde directamente a la pregunta de "¿Hay alguna manera de matar a un bucle setInterval a través de un botón de clic" si –

4

clearInterval se aplica sobre el valor de retorno de setInterval, así:

var interval = null; 
theSecondButton.onclick = function() { 
    if (interval === null) { 
     interval = setInterval(generation, 1000); 
    } 
} 
theThirdButton.onclick = function() { 
    if (interval !== null) { 
     clearInterval(interval); 
     interval = null; 
    } 
} 
+0

(intervalo === nulo) debe ser si (intervalo! == nulo) – Hatim

+0

@Hatim: Reparado. – kennytm

20

setInterval devuelve un identificador, es necesario que el mango para que pueda despejarse

más fácil, cree una var para el manejador en su cabezal html, luego en su uso onclick use el var

// in the head 
var intervalHandle = null; 

// in the onclick to set 
intervalHandle = setInterval(.... 

// in the onclick to clear 
clearInterval(intervalHandle); 

http://www.w3schools.com/jsref/met_win_clearinterval.asp

Cuestiones relacionadas