8
votes

Settimeout ne travaille pas avec JQuery.each, cette

J'essaie d'ajouter un délai entre les appels jQuery .RemoVeclass lors de l'itération à travers les cellules d'une table. Les cellules s'affichent correctement sans settimeout, mais avec des pauses de code. Qu'est-ce que je fais mal? XXX


0 commentaires

4 Réponses :


1
votes

première chose d'abord, évitez d'utiliser une chaîne pour le premier argument de Settimeout code>, utilisez une fonction anon, car il est plus facile de déboguer et de maintenir:

$("td").each(function() {
    var $this = $(this);
    var t=setTimeout(function(index) {
       $this.removeClass("invisible")
    }, 500 * (index+1));
});


0 commentaires

2
votes

Votre Ce code> est signalé sur la fenêtre globale code>.

function reveal_board() {
  $("td").each(function() {
    $this = $(this);
    var t=setTimeout(function(){$this.removeClass("invisible");}, 500);
  });
}


0 commentaires

23
votes

Essayez ceci:

function reveal_board() {
    $("div").each(function(index) {        
        var that = this;
        var t = setTimeout(function() { 
            $(that).removeClass("invisible"); 
        }, 500 * index);        
    });
}


1 commentaires

SRY Pour le Modifier, j'ai accidentellement évanoui et j'ai dû éditer afin que je puisse uppoter à nouveau.



1
votes

Eh bien, j'ai eu le même problème et j'ai résolu de cette façon ... mais je n'ai aucune idée des performances ou de quoi que ce soit, je l'ai utilisé dans une boucle très courte (10 éléments max) et cela fonctionnait parfaitement. .. Au fait, je l'ai utilisé pour ajouter une classe, donc je vous laisserai comprendre ce qu'il donne pour supprimer une classe;).

var elements = $(".elements");
var timeout;

elements.each(function(e){
    timeout = setTimeout(function(index) {
       elements[elements.length-e-1].setAttribute('class', elements[elements.length-e-1].getAttribute('class')+' MY-NEW-CLASS');
    }, 500 * e);
});


0 commentaires