所以,我想延迟这个JavaScript代码。
$(function(){
$('.clickThis').each(function(){
$(this).click();
});
});
我试过这个
$(function(){
$('.clickThis').each(function(){
$(this).click().delay(5000);
});
});
以上脚本无效。
还有其他选择吗?
我已经尝试了谷歌,但我仍然无法理解,因为我对JavaScript知之甚少。
答案 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
的一次调用,原因如下:
setInterval
个调用也可以排队多个事件,然后当浏览器再次激活时,所有事件都会尽可能快地触发。呼叫setTimeout
递归地保证事件之间的最小时间间隔得到遵守。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);
);
});