事件监听器实际上在事件完成之前开始运行其代码,因此我们能够阻止Default()。但是,如果我必须在事件结束后才做某事,并且不提前做这件事非常重要,该怎么办?
我尝试将仅在事件完成后才需要运行的代码放置在监听器的 return 语句之后,就像自调用函数一样:
$(...).on(event, function(evt){
//do stuff
return (function(){
// do stuff after the event
})();
});
但这没有帮助。唯一有效的似乎是使用 setTimeout
。但这确实不是一个好主意,因为它不是确定性的,并且在某些条件下,超时可能会不足并且该想法会失败。
我怎样才能在事件结束后才做某事?
最佳答案
作为浏览器优化,事件处理程序会稍微提前调用,以防止可能的阻塞行为。您可以使用 setTimeout 稍微延迟一下,比如 30 毫秒。根据定义,事件的调用和处理是不确定的。它不知道“完成”事件意味着什么。您对处理程序所做的操作有更多上下文。如果是 XHR 调用,则有 onreadystatechange 回调,如果正在加载图像,则使用“onload”事件。表单提交,如果是通过AJAX调用完成的,可以通过readyState==4来检测;否则,您可能会在服务器端检测 $_POST 数据并注入(inject)脚本 block 。
关于javascript - JS 在事件发生后做一些事情,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31368810/