2010-07-26 6 views
2

Code HTML:élément de mise à jour en utilisant jQuery .each()

div id="updatePanel">​

Code jQuery:

var data=[1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 

$.each(data, function(index, value) { 
    setTimeout(function(){ 
    $('#updatePanel').text(index);  
    }, 5000); 
}); 

Je veux que le contenu UpdatePanel div à être mis à jour toutes les 5 secondes. Il devrait être 1 puis attendre 5 secondes, afficher 2, attendre encore 5 secondes ......

Cela ne fonctionne pas comme prévu. Il attend pendant 5 secondes et l'affichage 9.

Voir la démo ici: http://jsfiddle.net/vc7qB/4/

+0

bien qu'il ait une réponse acceptée, je vote pour rouvrir, car il est une question valable maintenant .. et informations complémentaires pourrait être donné .. –

Répondre

8

Modifier le }, 5000);-}, 5000*index);

Cela fera chaque élément d'attendre 5 secondes de plus que la précédente ...

Gardez à l'esprit que tous les délais d'attente sont créées en même temps, mais avec des temps de retard ..

Il serait préférable de commencer par une simple délai d'attente et à chaque exécution de créer le prochain ..

comme celui-ci

var data=[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; 

    function update(idx){ 
     setTimeout(function(){ 
     $('#updatePanel').text(data[idx]); 
     if (idx < data.length - 1) 
      update(idx+1); 
     },1000); 
    } 

update(0); 
+0

+ 1 concis, intelligent! – naikus

+0

"Gardez à l'esprit que tous les délais d'attente sont créés en même temps ..." Je ne comprends pas parfaitement cette partie. Je pensais .each est fondamentalement le même que pour la boucle. Le code suivant: $ .each (données, fonction (index, valeur) { $ ('# updatePanel'). Html (index); }); doit boucler chaque élément et mettre à jour le updatePanel séquentiellement. Cette .each $ (données, fonction (indice, valeur) { setTimeout (function() {$ ('# UpdatePanel') texte (index);. }, 5000); }); devrait définir le délai d'attente toutes les 5 secondes. Pouvez-vous expliquer pourquoi les délais d'attente sont créés en même temps? Merci. – user187870

+2

@ user187870, tout comme dans une boucle, vos délais d'attente sont tous créés à une milliseconde près l'un de l'autre. Ils attendent tous 5 secondes, donc ils expirent tous presque en même temps, donc la mise à jour se passe pour tous et la dernière est ce que vous voyez dans votre div .. dans mon exemple nous avons plusieurs fois le retard de chacun avec leur index dans le tableau, donc le premier attendra 5000x1, le second 5000x2 etc. (* effectivement toutes les 5 secondes *) –

Questions connexes