[英]How to add .delay to .click on .each iteration (jquery)
所以,我想延迟这个JavaScript代码。
$(function(){
$('.clickThis').each(function(){
$(this).click();
});
});
我试过这个
$(function(){
$('.clickThis').each(function(){
$(this).click().delay(5000);
});
});
上面的脚本不起作用。
还有其他选择吗?
我已经尝试了谷歌,但我仍然无法弄清楚,因为我对JavaScript知之甚少。
这样做:
$(function(){
$('.clickThis').each(function(i, that){
setTimeout(function(){
$(that).click();
}, 5000*i );
});
});
这是一个使用递归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
您必须记住计时器句柄,以便清除它 试着用这个:
$(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);
});
您需要编写一个异步的setTimeout循环,以获取更多信息http://www.erichynds.com/javascript/a-recursive-settimeout-pattern/
var $clickthis=$(".clickthis");
var i= -1;
var delayed = setInterval(function(){
if (++i < $clickthis.length) $clickthis.eq(i).trigger("click");
else clearInterval(delayed);
}, 5000);
我不确定,但我认为setTimeout函数应该可以解决问题。 请参见https://developer.mozilla.org/en-US/docs/DOM/window.setTimeout
尝试
$(function(){
$('.clickThis').each(function(_,i){
var me=$(this);
setTimeout(function(){me.click()},5000*i);
);
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.