Boucle setTimeout
Je suis en train d'essayer d'envelopper ma tête autour de JavaScript.
Ce que je veux c'est un texte à imprimer sur l'écran, suivi par un nombre à un nombre donné, comme suit:
"Test"
[1 sec. pause]
"1"
[1 sec. pause]
"2"
[1 sec. pause]
"3"
C'est mon JS:
$(document).ready(function() {
var initMessage = "Test";
var numberCount = 4;
function count(){
writeNumber = $("#target");
setTimeout(function(){
writeNumber.html(initMessage);
},1000);
for (var i=1; i < numberCount; i++) {
setTimeout(function(){
writeNumber.html(i.toString());
},1000+1000*i)};
};
count();
});
C'est mon balisage:
<span id="target"></span>
Quand je le rendu de la page, tout ce que j'obtiens est "Test", suivi par "4".
Je suis pas de JavaScript génie, de sorte que la solution pourrait être assez facile. Tous les conseils sur ce qui est mal, c'est très apprécié.
Vous pouvez jouer avec mon exemple ici: http://jsfiddle.net/JSe3H/1/
OriginalL'auteur timkl | 2011-11-20
Vous devez vous connecter pour publier un commentaire.
Vous avez un problème de la portée des variables. Le compteur (
i
) à l'intérieur de la boucle est seulement limité à lacount
fonction. Par le temps que la boucle a fini de s'exécuter,i
s valeur est 4. Cela affecte tous lessetTimeout
fonction, qui est pourquoi vous ne verrez jamais "4".Je voudrais réécrire comme ceci:
La
createTimer
fonction garantit que la variable à l'intérieur de la boucle est "capturé" le nouveau périmètre quicreateTimer
fournit.Mis À Jour Exemple: http://jsfiddle.net/3wZEG/
Aussi découvrez ces questions connexes:
writeNumber
que c'est un implicite mondial actuellement.Bonne prise! Mis à jour.
Merci beaucoup de m'aider! 🙂
Pas de problème! Heureux de vous aider
:)
OriginalL'auteur Andrew Whitaker
Dans votre exemple, vous êtes en train de dire "2, 3, 4 et 5 secondes à partir de maintenant, respectivement, écrire la valeur de
i
". Votre pour-boucle sera passé toutes les itérations, et définir la valeur dei
à 4, longtemps avant que les deux premières secondes se sont écoulées.Vous avez besoin pour créer une fermeture dans laquelle la valeur de ce que vous essayez d'écrire est préservée. Quelque chose comme ceci:
Une autre méthode entièrement serait quelque chose comme ceci:
OriginalL'auteur David Hedlund
Espère que cela aide:
OriginalL'auteur Sudhir Bastakoti