在加载事件处理程序之前取消

Cancel onbeforeunload event handler?

本文关键字:取消 程序 加载 事件处理      更新时间:2023-09-26

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

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

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

是否有某种方法可以解除此onbeforenload事件的绑定?我使用的是JavaScript,以jQuery为框架,所以在jQuery中给出答案会很好。

在javascript中,函数可以被覆盖。你可以简单地为它指定一个新的用途:

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

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

注意:为什么不简单地删除设置此函数的代码行呢?或者,如果不能,则必须在定义此空白函数后设置它,以确保它不会再次被覆盖

添加:

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

要删除:

window.removeEventListener("beforeunload", f_beforeunload);

与这个问题没有直接关系,但可能会对某人有所帮助。这就是我在Angular 1.x和TypeScript:中使用的内容

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

jQuery≥1.7

在jQuery1.7以后的版本中,事件API已经更新,.bind()/.unband()仍然可以向后兼容,但首选的方法是使用on()/of()函数。下面是

$('#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 )