jQuery触发器事件有延迟

时间:2014-11-07 17:30:55

标签: javascript jquery events jquery-events

我的情况是页面上有一系列按钮。单击按钮会触发多个功能并运行一系列复杂的计算。

然后我有一个基本上是"点击全部"按钮将触发每个按钮上的单击事件:

$('.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()调用的方式排队等等(?)。事件排队和同步调用对我来说仍然有点不清楚。

关于如何使这项工作的任何想法?

2 个答案:

答案 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);