setTimeout不适用于每个循环

时间:2016-04-12 14:24:49

标签: jquery

我试图通过使用setTimeout来延迟每个循环。

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

            },2000);
        });

警报或点击事件未触发。我哪里做错了?我希望每次循环迭代都是2秒。

2 个答案:

答案 0 :(得分:1)

我不知道我的问题是否正确,但你想在2秒后循环播放一些元素?

使用Jquery解决此问题的方法:

您可以将延迟方法(https://api.jquery.com/queue/)与队列方法(https://jsfiddle.net/crix/bb4nbkts/)结合使用

-cp

有关工作示例,请检查此链接: JSFIDDLE DEMO

希望这对你有所帮助。

答案 1 :(得分:-1)

尝试在此背景下使用箭头功能,

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

代码中的问题是this上下文。在普通的setTimeout的callBack中,this将指向window。所以有箭头函数,它会将最近的上下文this值绑定到其中。

此外,您必须延迟(i * 2000),然后只有延迟将变为0,2000,4000,依此类推。这将使您看到callBack的工作时间间隔为2秒。