如何在.each迭代(jquery)上添加.delay到.click

时间:2013-02-08 14:43:48

标签: javascript jquery delayed-execution

所以,我想延迟这个JavaScript代码。

$(function(){ 
     $('.clickThis').each(function(){ 
         $(this).click();
     }); 
});

我试过这个

$(function(){ 
     $('.clickThis').each(function(){
         $(this).click().delay(5000); 
     }); 
});

以上脚本无效。

还有其他选择吗?

我已经尝试了谷歌,但我仍然无法理解,因为我对JavaScript知之甚少。

7 个答案:

答案 0 :(得分:9)

这样做:

$(function(){ 
    $('.clickThis').each(function(i, that){ 
        setTimeout(function(){
            $(that).click();
        }, 5000*i );
    }); 
});

答案 1 :(得分:5)

这是一个使用递归setTimeout循环的版本。

$(function() {
    var click = $('.clickThis').toArray();

    (function next() {
        $(click.shift()).click();   // take (and click) the first entry
        if (click.length) {         // and if there's more, do it again (later)
            setTimeout(next, 5000);
        }
    })();
});

此模式优于setTimeout(..., 5000 * i)setInterval调用的优势在于,只有一个计时器事件一次排队。

一般情况下,对setTimeout的重复调用优于对setInterval的一次调用,原因如下:

    即使浏览器未处于活动状态,
  1. setInterval个调用也可以排队多个事件,然后当浏览器再次激活时,所有事件都会尽可能快地触发。呼叫setTimeout递归地保证事件之间的最小时间间隔得到遵守。
  2. 使用setInterval,您必须记住计时器句柄,以便清除它

答案 2 :(得分:0)

尝试使用它:

$(function () {
    var items=$('.clickThis');
    var length=items.length;
    var i=0;
    var clickInterval=setInterval(function(){
        items.eq(i).click();
        i++;
        if(i==length)
            clearInterval(clickInterval);
    }, 5000);
});

答案 3 :(得分:0)

您需要编写异步setTimeout循环,以获取更多信息http://www.erichynds.com/javascript/a-recursive-settimeout-pattern/

答案 4 :(得分:0)

var $clickthis=$(".clickthis");
var i= -1;
var delayed = setInterval(function(){
 if (++i < $clickthis.length) $clickthis.eq(i).trigger("click");
 else clearInterval(delayed);
}, 5000);

答案 5 :(得分:-1)

我不确定,但我认为setTimeout函数应该可以解决问题。 见https://developer.mozilla.org/en-US/docs/DOM/window.setTimeout

答案 6 :(得分:-3)

尝试

$(function(){ 
     $('.clickThis').each(function(_,i){ 
        var me=$(this);
        setTimeout(function(){me.click()},5000*i);
     ); 
});