如果一个事件触发了随机次数,我如何在 Javascript/Jquery 中捕获最后一个?

Posted

技术标签:

【中文标题】如果一个事件触发了随机次数,我如何在 Javascript/Jquery 中捕获最后一个?【英文标题】:If an event fires a random amount of times, how do I capture the last one in Javascript/Jquery? 【发布时间】:2012-10-24 14:08:39 【问题描述】:

我有一个功能,可以调整页面上的元素宽度/高度。此函数由自定义dimensionchange 事件触发。

我是

$(window).trigger("dimensionchange") 

每当我通过 AJAX 加载内容或更改页面时(我使用的是 jquery mobile)。

我的问题是在某些页面上,触发了一堆 Ajax 请求(例如,搜索页面,ajax 加载条件和初始结果),所以我最终得到了几个 "dimensionchange" 事件,它们都触发了我的布局更新功能。这会大大减慢页面速度并且没有必要,因为我只需要捕获最后一个dimensionchange 然后更新布局。

问题: 当事件触发随机次数时,有没有办法捕获事件的最后一次发生?我唯一能想到的就是在每个事件发生时设置一个超时,如果在...... 500ms 内没有进一步的事件......触发页面更新。但这似乎很尴尬,所以我很想知道是否有更好的方法?

感谢您的帮助!

【问题讨论】:

【参考方案1】:

您想使用 jQuery 的 Global Ajax Event Handlers ajaxStart()ajaxStop() 方法。

最近还有一篇关于使用 AjaxStop and AjaxStart 的帖子。您需要知道的主要事情是,您可以在第一个 ajax 查询开始时以及最后一个查询结束时收到通知。你可以像这样设置一个标志:

$(document).ready(function() 
    var ajaxBusy = false;

    $(document).ajaxStart( function()  
        ajaxBusy = true; 
    ).ajaxStop( function() 
        ajaxBusy = false;
    );
);

【讨论】:

好。听起来正是我正在寻找的东西。谢谢! 这是一个很酷的技术。不过我有点困惑,“最后一个”AJAX 事件到底是什么,你怎么知道它是最后一个? jQuery 会为您跟踪它们。如果没有 jQuery.ajax 请求正在运行,并且您启动了一个,那么将调用 ajaxStart() 回调。当所有正在运行的 jQuery.ajax 请求都完成后,将调用 ajaxStop() 回调。 这真是太好了。再次感谢您的回答!

以上是关于如果一个事件触发了随机次数,我如何在 Javascript/Jquery 中捕获最后一个?的主要内容,如果未能解决你的问题,请参考以下文章

C语言如何实现随机事件

移动设备触摸事件的触发次数不如我点击的次数多

如何让 HTML 按钮的 onclick 事件随机触发两个不同功能之一?

检查 onclick 事件触发的表单元素

在指定的时间内点击某元素达到一定的次数后才触发事件

为什么编辑器的Completed事件随机触发?