在jQuery Each循环中等待/暂停/休眠以等待迭代之间的时间

4
我想在jQuery each循环的每次迭代后添加暂停,但我似乎无法弄清楚如何实现。
$(".item").each(function(i){
    var el = this;
    var timer = setTimeout(function(){
        $(el).trigger("click");
    }, 500);
});

这个代码并不是每半秒触发一次,而是一次性地触发所有项目的点击事件。

我想要类似于以下伪代码的效果:

$(".item").each(function(i){
    $(this).trigger("click");
    wait(500); // wait a half second before the next iteration
});

这个有什么可行的方法吗?
2个回答

4

您无法通过$.each实现此操作。您可以使用setTimeout并保留对当前索引的引用:

function process(elements, cb, timeout) {
    var i = 0;
    var l = elements.length;

    (function fn() {
        cb.call(elements[i++]);
        if (i < l) {
            setTimeout(fn, timeout);
        }
    }());
}

process($('.item'), function() {
    $(this).click();
}, 500);

2

嗨,你可以尝试这个方法,或者编写一个SetTimeOut函数,你已经尝试过了。

演示 => http://jsfiddle.net/Yq2SL/2/ 你会看到具有class=item的不同父级div

API: http://api.jquery.com/jQuery.dequeue/ & http://api.jquery.com/jQuery.queue/#jQuery-queue1

一些阅读资源:

http://forum.jquery.com/topic/delay-and-click-issue

http://blog.project-sierra.de/archives/1559

希望能对你有所帮助 :)

示例代码:

$(".item").delay(500).queue(function(){ 
  $(this).trigger("click"); 
  $(this).dequeue(); 
});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接