web-dev-qa-db-ja.com

onbeforeunloadイベントハンドラーをキャンセルしますか?

ページがリロード/リダイレクトされるたびに実行されるonbeforeunloadイベントハンドラーがページにアタッチされています。

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

テスト中にこのスクリプトを実行したくありません。自分のテスト環境で無効にしたい。

このonbeforeunloadイベントのバインドを解除する方法はありますか?私はJavaScriptを使用しており、フレームワークとしてjQueryを使用しているので、jQueryでの回答が良いでしょう。

20

Javascriptでは関数を上書きできます。あなたは単にそれに新しい目的を割り当てることができます:

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

これにより、既存のバージョンのwindow.onbeforeunloadが完全に上書きされます。

注:そもそもこの関数を設定するコード行を単純に削除してみませんか?または、できない場合は、定義後にこの空白の関数を設定して、再度オーバーライドされないようにする必要があります。

34
Ibu

この質問にすぐには関係ありませんが、それでも誰かを助けるかもしれません。これは私がAngular 1.xとTypeScriptで使用しているものです:

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

たす:

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

削除する:

window.removeEventListener("beforeunload", f_beforeunload);
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');
0
murthy naika k