取消onbeforeunload事件处理程序?

问题描述:

我有一个onbeforeunload事件处理程序附加到页面,每次页面重新载入/获取重定向时执行。取消onbeforeunload事件处理程序?

window.onbeforeunload = function() { 
    console.log("do something");} 

我不希望脚本在测试期间运行。我想在我自己的测试环境中禁用它。

有没有办法解除这个onbeforeunload事件?我使用JavaScript,jQuery作为框架,所以jQuery中的答案会很好。

在javascript函数中可以被覆盖。您可以简单地为其指定一个新目的:

window.onbeforeunload = function() { 
    // blank function do nothing 
} 

这将完全覆盖现有版本window.onbeforeunload

注意:为什么不简单地首先删除设置此函数的代码行?或者,如果你不能,你将不得不在设置这个空白功能后,以确保它不被重写

+1

这完美地在我们的AJAX函数里面碰到了同样的问题。 +1 – Ligemer 2013-07-03 04:59:03

+11

或'window.onbeforeunload = null;' – 2015-06-01 13:35:16

与此问题没有直接关系(请不要因为这个问题downvote ),但可以帮助别人不过,这是我在角1.x和打字稿使用:

this.$window.onbeforeunload =() => null; 
+0

然后......有人低估了它。大声笑 – Simon 2017-04-17 12:31:56

+0

也许因为这需要angular和TypeScript来做一些事情,可以在没有它的单行代码中完成。 – Ibu 2017-12-20 01:05:16

+0

也许,但我明确表示,虽然略有不相关,但可能使用Angular的人可能会在此找到用处。这段代码中的TypeScript是无关紧要的 - 它恰好是我设置的一部分。我可以理解不投票,但是投票反而有点小。再说一遍,也许我在这里让我的蠢货变成了麻烦。 – Simon 2017-12-29 01:30:23

的jQuery≥1.7

使用jQuery 1.7以后的事件API已经更新,.bind()/ .unbind()仍然可用于向后兼容,但首选的方法是使用on()/ off()函数。下面现在是,

$('#myimage').click(function() { return false; }); // Adds another click event 
$('#myimage').off('click'); 
$('#myimage').on('click.mynamespace', function() { /* Do stuff */ }); 
$('#myimage').off('click.mynamespace');