3

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

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

我试过这个

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

上面的脚本不起作用。

有没有其他选择?

我已经尝试过谷歌它,但我仍然无法弄清楚,因为我对 JavaScript 知之甚少。

4

7 回答 7

9

这将做到:

$(function(){ 
    $('.clickThis').each(function(i, that){ 
        setTimeout(function(){
            $(that).click();
        }, 5000*i );
    }); 
});
于 2013-02-08T14:48:32.910 回答
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以便清除它
于 2013-02-08T15:19:05.180 回答
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);
});
于 2013-02-08T14:48:13.953 回答
0

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

于 2013-02-08T14:49:45.187 回答
0
var $clickthis=$(".clickthis");
var i= -1;
var delayed = setInterval(function(){
 if (++i < $clickthis.length) $clickthis.eq(i).trigger("click");
 else clearInterval(delayed);
}, 5000);
于 2013-02-08T14:50:49.447 回答
-1

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

于 2013-02-08T14:45:47.080 回答
-3

尝试

$(function(){ 
     $('.clickThis').each(function(_,i){ 
        var me=$(this);
        setTimeout(function(){me.click()},5000*i);
     ); 
});
于 2013-02-08T14:50:00.640 回答