事件监听器实际上在事件结束之前开始运行他们的代码,因此我们有能力阻止默认()。但是,如果我必须在事件结束后做一些事情并且之前不这样做真的很重要呢?
我已尝试将事件完成后需要运行的代码放在侦听器的return语句之后,就像自调用函数一样:
$(...).on(event, function(evt){
//do stuff
return (function(){
// do stuff after the event
})();
});
但这没有用。似乎唯一有效的方法是使用setTimeout
。但这确实不是一个好主意,因为它不是确定性的,在某些情况下,超时可能会变得不充分并且这个想法失败了。
如何在事件结束后才能做某事?
答案 0 :(得分:0)
在浏览器优化之前稍微调用事件处理程序以防止可能的阻塞行为。您可以使用setTimeout给它稍微延迟,比如30ms。根据定义调用和处理事件是不确定的。它不知道通过“完成”事件意味着什么。你对处理程序的处理有更多的上下文。如果是XHR调用,则有onreadystatechange回调,如果它正在加载图像,则使用“onload”事件。如果通过AJAX调用完成表单提交,则可以通过readyState == 4检测到;否则你可能会在服务器端检测到$ _POST数据并注入一个脚本块。