我的情况是页面上有一系列按钮。单击按钮会触发多个功能并运行一系列复杂的计算。
然后我有一个基本上是"点击全部"按钮将触发每个按钮上的单击事件:
$('.myBtn').trigger('click'); // $('.myBtn') returns a list of all buttons
这在大多数现代浏览器中都可以正常使用,但在IE中,触发器('点击')需要很长时间才能运行,而且我的脚本经常花费太长时间。错误。
不幸的是,事情的设置方式并没有真正的方法可以避免重复点击计算。
所以我想加入某种延迟。所以在"点击全部",触发btn1 click
,等待200毫秒,触发btn2 click
,等待......等等。
我尝试过这样的事情:
$('.btnAll').each(function() {
var el = $(this);
setTimeout(function () {
el.trigger('click');
}, 200);
});
但是我不认为这是正常的,因为.each()调用的方式排队等等(?)。事件排队和同步调用对我来说仍然有点不清楚。
关于如何使这项工作的任何想法?
答案 0 :(得分:2)
.each()
调用没有“排队”,它们只是一个接一个地对集合的每个元素执行给定的函数。因此,您为每个按钮设置 - 单击200ms的超时。结果:200ms后,所有按钮都在(几乎)同时被触发。如果你想在两者之间延迟点击错开点击,你必须给它们不同的时间,如下所示:
$('.btnAll').each(function(i) { // i is index of this in the collection
var el = $(this);
setTimeout(function () {
el.trigger('click');
}, i * 200); // each button gets a multiple of 200ms, depending on its index
});
这会立即触发第一个按钮,第二个触发第二个按钮,第三个按钮....
答案 1 :(得分:0)
试试吧
function myEach(){
$('.btnAll').each(function() {
$(this).trigger('click');
});
}
setTimeout(myEach(),200);