Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/magento/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 检测beforeunload事件是否被无关函数取消_Javascript_Jquery - Fatal编程技术网

Javascript 检测beforeunload事件是否被无关函数取消

Javascript 检测beforeunload事件是否被无关函数取消,javascript,jquery,Javascript,Jquery,我有一个简单的函数,可以在发出新页面请求时显示微调器覆盖 $(window).on("beforeunload", function() { $('#nav-spinner').show(); }); 这个很好用。。但是,它用于复杂的WordPress站点,还有其他(第三方)组件也使用此事件有时取消导航(例如,当导航离开部分填充的表单时进行确认) 是否有任何方法可以确定是否有其他功能取消了页面卸载,以便我可以在覆盖仍保留在页面上时立即删除覆盖 我希望在取消实际导航时执行此操作-使用计时器删

我有一个简单的函数,可以在发出新页面请求时显示微调器覆盖

$(window).on("beforeunload", function() {
  $('#nav-spinner').show();
});
这个很好用。。但是,它用于复杂的WordPress站点,还有其他(第三方)组件也使用此事件有时取消导航(例如,当导航离开部分填充的表单时进行确认)

是否有任何方法可以确定是否有其他功能取消了页面卸载,以便我可以在覆盖仍保留在页面上时立即删除覆盖

我希望在取消实际导航时执行此操作-使用计时器删除覆盖将导致覆盖过早隐藏或保留时间过长。

显示问题的测试用例 下面的代码显示了您当前拥有的内容。我将背景设置为红色,因为这是最少的代码量

window.addEventListener(“beforeunload”,函数(事件){
document.body.classList.add(“红色”);
});
//显示“您确定”的第三方代码
addEventListener(“beforeunload”,函数(事件){
event.preventDefault();
event.returnValue='我是第三方代码';
});
.red{
背景色:红色;
}

单击我,然后单击“取消”

没有取消事件…我的覆盖需要保留在页面上,直到页面实际卸载(这可能需要几秒钟,取决于服务器端执行的操作),因此很遗憾,计时器不足以满足要求。这就是代码将要做的。。。计时器在取消时运行,在调用卸载时删除。可能要玩毫秒游戏。。。。。没有事件,所以你必须有创意。在我看来,它会删除卸载时的覆盖,但这不是问题所在。如果卸载被取消,我需要删除它。我错过什么了吗?不。。。。如果卸载触发,它将删除超时……您误读了代码。抱歉,我想你误解了这个问题。显示覆盖层不是问题。问题是,如果代码外部的内容阻止卸载,我需要隐藏覆盖。我测试了你的代码,它所做的只是在每次页面更改时抛出一个确认。如果我自己做确认会很容易,但我不是。