2012-05-16 8 views
6

テーブルのセルを反復処理するときにjquery .removeClass呼び出しの間に遅延を追加しようとしています。セルはsetTimeoutなしで正しく表示されますが、setTimeoutを指定するとコードが改行されます。私は間違って何をしていますか?まず、それはデバッグが簡単だとして、代わりに匿名関数を使用し、setTimeoutの最初の引数に文字列を使用しないようにし、維持setTimeoutがjquery.eachで動作しない、

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

答えて

15

これを試してみてください:

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

それはsetTimeout()に文字列を渡すために、一般的に悪い習慣だとも私はそのように使用しているときに変数を渡すことができるとは思いません。

また、thatが常に正しい要素に適用され、置換されないようにクロージャーでラップしました。

NiftyDudeのように、インデックスを渡して、それを使って順に各要素を表示することができます。

の作業例 - あなたが閉鎖を必要としないようhttp://jsfiddle.net/Cc5sG/

EDIT

はルックス:

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

http://jsfiddle.net/Cc5sG/1/

+0

ありがとう、ありがとうございます! – valen

+0

ありがとう!私の3時間は苦労します:(。 – Bhimbim

+0

編集のためにうっかり、私は誤ってダウンしてしまい、編集しなければならなかったので、もう一度アップアップすることができます。 – Black

1

まず最初:

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

また、私が何を本当にわからないんだけど(後であなたの質問を更新し、私は私の答えを適応します)ここで達成しようとしているが、あなたは次々と各td 500ミリ秒からinvisibleクラスを削除する場合は、使用することができますindex

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

お客様のthisは、グローバルwindowを指しています。

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

まあ、私は同じ問題を持っていました私はそれを解決しました...しかし、私は演奏などについて何も知らない、私はそれを使用した非常に短いループ(最大10要素)で、それは完全に機能しました...私はクラスを追加するためにそれを使用したので、クラスを削除するために何を与えるかを理解させます;)

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); 
}); 
関連する問題