javascript - JS 在事件发生后做一些事情

标签 javascript jquery

事件监听器实际上在事件完成之前开始运行其代码,因此我们能够阻止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/

相关文章:

javascript - $(document).ready() 和在正文末尾包含脚本有什么区别?

javascript - 所有图像的src与jquery

javascript - jQuery:更改一个表格单元格的边框颜色

javascript - 如果我点击它之外的任何地方,我想让我的 div 隐藏,我如何在 jQuery 中做到这一点?这个 SO 解决方案让我感到困惑

javascript - 外部 JSON 和外部模板 - 无法同时工作

javascript - 使用 Jquery 在点击时显示 div

javascript - 在确认对话框取消选择后,如何取消用户单选按钮选择?

javascript - 如何验证股市数据

javascript - 在调用 REST 端点之前进行身份验证

javascript - indexOf 不断返回 -1 Javascript