2017-10-01 9 views
0

j'ai donc un important function qui déclenche un autre function tous les 2 - 17 secondes, mais lorsque je tente de l'arrêter avec clearTimeout() il va juste et ne tient aucun compte du clearTimeout().Je peux en quelque sorte pas arrêter ma boucle setTimeout()

Voici donc ma fonction principale:

var itemTimer; 
var stopTimeout; 

function major(){ 
    var itemTime = Math.floor(Math.random() * 15000) + 2000; 
    itemTimer = setTimeout('items()', itemTime);  
    stopTimeout = setTimeout('major()',itemTime); 
} 

Et ceci est ma fonction de temporisation d'arrêt:

function stopTimer() { 
    clearTimeout(itemTimer); 
    clearTimeout(stopTimeout); 
} 

Merci d'aider

+0

Où et comment appelez-vous 'stopTimer'? – Xufox

Répondre

1

Votre setTimeout() est d'être appelé à tort; vous appelez items() et major(). Au lieu de cela, vous devez les passer en tant que fonctions à appeler.

Ne pas passer les parenthèses aux paramètres et ne pas envelopper les paramètres dans les guillemets.

Au lieu de:

itemTimer = setTimeout('items()', itemTime);  
stopTimeout = setTimeout('major()',itemTime); 

Vous êtes à la recherche:

itemTimer = setTimeout(items, itemTime); 
stopTimeout = setTimeout(major, itemTime); 

Hope this helps! :)

+1

Alors que 'setTimeout (items, itemTime)' est la syntaxe préférée, ces deux façons de définir un délai sont plus ou moins équivalentes. Ce n'est pas le problème. – Xufox

+0

@NichtEric - Génial! Une fois que vous avez confirmé que cela résout votre problème, s'il vous plaît ne pas oublier de [** marquer comme accepté **] (https://stackoverflow.com/help/someone-answers) en cliquant sur le chèque gris ci-dessous le boutons de vote - cela le supprime de la file d'attente 'Questions non répondues' et attribue la réputation à l'auteur de la question et au questionneur. Vous pourrez le faire 15 minutes après avoir posé n'importe quelle question. Bien sûr, en disant cela, vous n'êtes pas obligé de marquer ma réponse (ou celle de quelqu'un d'autre) comme correcte, bien que le fait de marquer une question comme résolue aide à garder les choses fluides :) –

+0

Ok merci je ne le savais pas depuis que je suis Relativement nouveau sur ce site: D –

1

Je pense que vos délais d'attente s'accumulent. Dès que major est appelée une fois, les variables itemTimer et stopTimeout sont réaffectées à une nouvelle référence de délai d'expiration. Il n'y aura donc aucun moyen d'effacer les délais d'attente précédemment définis. Si c'est le cas, cela devrait être une solution facile. Il suffit d'appeler stopTimer comme première déclaration major:

function major(){ 
    stopTimer(); 
    var itemTime = Math.floor(Math.random() * 15000) + 2000; 
    itemTimer = setTimeout('items()', itemTime);  
    stopTimeout = setTimeout('major()',itemTime); 
}