2010-05-07 6 views
10

Quindi, ho ottenuto un ciclo infinito per lavorare in questa funzione utilizzando setInterval collegato a un onClick. Il problema è che non posso fermarlo usando clearInterval in un onClick. Penso che questo sia dovuto al fatto che quando si allega un valore clearInterval a un onClick, esso uccide un intervallo specifico e non la funzione del tutto. C'è qualcosa che posso fare a uccidere tutti gli intervalli attraverso un onClick?C'è un modo per uccidere un ciclo setInterval tramite un pulsante Onclick

Ecco la mia .js file e le chiamate che sto facendo sono

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. 

risposta

-1

Avere generation(); chiamata setTimeout a se stesso invece di setInterval. Questo è stato possibile utilizzare un po 'se la logica nella funzione per impedire di eseguire setTimeout abbastanza facilmente.

var genTimer 
var stopGen = 0 

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

}

+0

Questo non risponde direttamente alla domanda di "C'è un modo per uccidere un ciclo setInterval attraverso un pulsante di Onclick" –

4

clearInterval viene applicata sul valore di ritorno di setInterval, in questo modo:

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

se (intervallo === null) dovrebbe essere se (intervallo! == null) – Hatim

+0

@Hatim: corretto. – kennytm

20

setInterval restituisce un handle, è necessario che gestiscono in modo da poter cancellarlo

più semplice, crea una var per l'handle nel tuo html head, quindi nel tuo onclick usa il 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