如果一个事件触发了随机次数,我如何在 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 中捕获最后一个?的主要内容,如果未能解决你的问题,请参考以下文章