2016-04-12 10 views
1

setTimeoutを使用して各ループを遅延させようとしています。各ループでsetTimeoutが機能しない

$(".video_nav .item_container > .item").each(function() { 
var button = $(this); 
      setTimeout(function(i) { 
       alert("test"); 
       button.trigger("click"); 

      },2000); 
     }); 

アラートまたはクリックイベントが発生していません。どこで私は間違えましたか?私は各ループの反復を2秒にします。

+0

セレクタは正しいですか?もしあれば、少なくとも 'alert()'が動作するはずです。 – Tushar

+0

'これはあなたが思うものではありません。 – SLaks

+0

@SLaks私はそれを変更したので、2秒ごとにアラートを取得する必要がありますが、何もありませんか? – user892134

答えて

-1

は、あなたのコード内の

$(".video_nav .item_container > .item").each(function(i) { 
    setTimeout(() => { 
    $(this).trigger("click"); 
    }, i * 2000); 
}); 

問題がthis文脈で、この文脈では、矢印の機能を利用するようにしてください。普通のsetTimeoutのコールバックの中でthiswindowを指します。だから、矢印の関数が来て、最も近いコンテキストのthisの値をそれにバインドします。

また、(i * 2000)の遅延を与えなければなりません。遅延だけが0,2000,4000になります。コールバックがそれぞれ2秒の間隔で動作することがわかります。

+0

ありがとうございました。なぜ、矢印機能がこれを動作させましたか? – user892134

1

質問が正しいかどうかわかりませんが、2秒後にいくつかの要素をループさせたいのですか?

のjQueryを使用して、この問題の解決策:

確認してくださいあなたは働い例えばキュー法(https://api.jquery.com/queue/

$(".video_nav .item_container > .item").each(function() { 
    var button = $(this); 
    $(button).delay(2000).queue(function(){ 
     alert("test"); 
     button.trigger("click"); 
    }); 
}); 

との組み合わせで遅延法()を使用することができますこのリンク: https://jsfiddle.net/crix/bb4nbkts/

これはあなたの役に立つでしょう。