取消 onbeforeunload 事件处理程序?

30

我在页面上添加了一个onbeforeunload事件处理程序,每次页面重新加载/被重定向时都会执行。

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

我不想让这个脚本在我的测试期间运行。我想在我的测试环境中禁用它。

有没有一种方法可以解除onbeforeunload事件的绑定?我正在使用JavaScript,并使用jQuery作为框架,因此希望提供一个jQuery的答案。

4个回答

54

在 JavaScript 中,函数可以被重写。您可以简单地为其分配一个新目的:

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

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

注意:为什么不直接删除设置此函数的代码行呢?或者如果您无法删除,则必须在其定义之后设置此空白函数,以确保它不会再次被覆盖。


1
这在我们的 AJAX 函数中完美地运行,解决了同样的问题。+1 - akahunahi
27
或者 window.onbeforeunload = null; 该代码意为取消页面关闭前的警告提示。 - Limon Monte
1
这并不是覆盖之前的方法。如果之前的方法被调用一次,即使分配了新的方法也无法解决我的问题。它仍然会执行之前的方法。 - Pasupathi Rajamanickam
只有在调用之前才能重写它。 - Ibu

6

添加:

function f_beforeunload(e) {console.log("do something");}
window.addEventListener("beforeunload", f_beforeunload);

要删除:

window.removeEventListener("beforeunload", f_beforeunload);

4

虽然与此问题不直接相关,但可能仍有帮助。以下是我在 Angular 1.x 和 TypeScript 中使用的代码:

this.$window.onbeforeunload = () => undefined;

1
也许是因为这需要使用 Angular 和 TypeScript 来完成一行代码就可以完成的任务。 - Ibu
也许吧,但我明确表示,虽然略微不相关,但可能正在使用Angular的人可能会发现这很有用。 TypeScript在这段代码中是无关紧要的-它只是我的设置的一部分。我可以理解不点赞,但点踩有点小气。再说了,也许我在这里有些过于敏感了。 - Simon
2
FYI:这个方法会导致IE11显示确认消息时出现“null”消息。将null替换为undefined即可解决。 - nathan felix
必须是一个函数吗?onbeforeload的默认值是null,所以你不能只将其设置为null吗?this.$window.onbeforeunload = null; - rybo111

0

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');
$( window ).on( "unload", handler )

由于 .unload() 方法只是 .on( "unload", handler ) 的简写,因此可以使用 .off( "unload" ) 进行分离。

$( window ).off( "unload", handler )

这与onbeforeunload有什么关系? - rybo111
由于.unload()方法只是一个简写形式,即.on(“unload”,handler),因此可以使用.off(“unload”)进行分离。 - murthy naika k
@murthynaikak unload != onbeforeunload 因此 **onbefore**。 - brandito

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接