2012-01-14 2 views
1

Ok, donc il y a un bouton sur une page que j'essaye de changer le texte d'un compte à rebours fait en Javascript. Je suis assez nouveau à la langue (2 jours), et je ne suis pas sûr de ce qui ne va pas avec mon code. Au lieu d'attendre toute la seconde avant de recommencer, il se répète instantanément.Erreur de minuterie UserScript

var c = 15; 
function countDown(e){ 
    if (c!=0){ 
    e.value = 'Reply (' + c + ')'; 
    c--; 
    setTimeout(countdown(e),1000); 
    } 
    else{ 
    e.value = 'Reply'} 
    } 
} 

mais il semble qu'au lieu de prendre 15 secondes comme je supposais, il se déclenche au large à la fois (prouvé en me ajoutant dans un alert('a'); dans l'instruction if je pouvais voir le changement de texte du bouton)

Je ne suis pas sûr si c'est un problème avec Greasemonkey ou un problème avec mon javascript.

+0

Vous pouvez 'formater votre code' en ajoutant au début de chaque ligne quatre espaces ou en l'entourant de backticks. – mrtsherman

+0

Désolé, c'est la première fois que je poste un code ici. – user871154

+0

Copie fréquente! –

Répondre

3

Votre problème est avec cette ligne:

setTimeout(countdown(e),1000); 

countdown(e) est un appel à la fonction de compte à rebours qui retourne void. La fonction setTimeout accepte une référence de fonction et un délai d'attente, vous devez donc changer pour:

setTimeout(countdown, 1000); 

Votre code actuel appelle le compte à rebours (e) 15 fois récursive puis setTimeout (void, 1000);

Si vous avez besoin de setTimeout pour transmettre des arguments (comme e) à votre fonction, vous pouvez utiliser les paramètres facultatifs après le délai.

setTimeout(countdown, 1000, e); 
+1

@ user871154, vous pouvez essayer ceci [ici] (http://jsfiddle.net/3UpG6/1/). – PrimosK

+0

Désolé, j'ai eu très très side-tracked. Cela fonctionne parfaitement, merci d'aider ce débutant. – user871154