javascript - jQuery 延迟触发事件

标签 javascript jquery events jquery-events

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

然后我有一个本质上是“单击全部”按钮,它将触发每个按钮上的单击事件:

$('.myBtn').trigger('click'); // $('.myBtn') returns a list of all buttons

这在大多数现代浏览器中工作得很好,但在 IE 中,触发器(“点击”)需要很长时间才能运行,并且我经常收到“脚本花费太长时间”的错误。

不幸的是,事情的设置方式没有真正的方法来避免点击时的繁重计算。

所以我正在考虑添加某种延迟。所以在“点击全部”时,触发btn1点击,等待200ms,触发btn2点击,等待...等等。

我尝试过以下方法:

$('.btnAll').each(function() {
    var el = $(this);
    setTimeout(function () {
        el.trigger('click');
    }, 200);
});

但我认为这不能正常工作,因为 .each() 调用的排队方式或其他原因(?)。事件队列和同步调用对我来说还是有点不清楚。

对于如何实现这项工作有什么想法吗?

最佳答案

.each() 调用不会“排队”,它们只是在集合的每个元素上一个接一个地执行给定的函数。因此,您为每个按钮单击设置了 200 毫秒的超时。结果:200 毫秒后,所有按钮(几乎)同时触发。如果您想错开点击之间的延迟,则必须给它们不同的时间,如下所示:

$('.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
});

这会立即触发第一个按钮,200 毫秒后触发第二个按钮,第三个按钮......

关于javascript - jQuery 延迟触发事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26806794/

相关文章:

javascript - 为什么我的对象引用不为空?

javascript - 在 JQuery Ajax 调用后将 PHP 中的 JSON 数据附加到脚本

javascript - 将 javascript 事件添加到输入复选框以在代码隐藏 asp.net 中执行,

javascript - API/应用程序设计 : Replace with very large array with a new array or modify the existing array

javascript - 使用 Javascript 检测 URL 并应用 CSS

javascript - 如何执行作为参数传递给另一个函数的 JavaScript 函数?

javascript - 我的表单的 OnMouseOver 通知

javascript - 如何使用 jquery 添加空数据列属性?

java - jquery ajax和java服务器,丢失数据

Javascript Change 和 Click 事件不会同时触发