2011-06-08 151 views
16

我有一個onbeforeunload事件處理程序附加到頁面,每次頁面重新載入/獲取重定向時執行。取消onbeforeunload事件處理程序?

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

我不希望腳本在測試期間運行。我想在我自己的測試環境中禁用它。

有沒有辦法解除這個onbeforeunload事件?我使用JavaScript,jQuery作爲框架,所以jQuery中的答案會很好。

回答

28

在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

0

與此問題沒有直接關係(請不要因爲這個問題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

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');