2013-11-15 5 views
11

私はこれらのうちのどれを使用すべきかを試しています:beforeunloadまたはonbeforeunloadどちらも非常に似たようなことをしているようですが、ブラウザの互換性は異なります。beforeloadまたはonbeforeunload

いくつかの文脈

私はフォームを持っています。ページの読み込みでは、フォームをシリアライズして変数に保存します。ユーザーがページを離れると、私はフォームをシリアライズし、2つを比較して、変更があったかどうかを確認します。ただし、フォームが提出された場合、イベントは発生しません。

例1

予想通り、私はこの作業を持っています。私はちょうど2つの違いを理解していない:

window.onbeforeunload = function(e) { 
    if(strOnloadForm != strUnloadForm) 
     return "You have unsaved changes."; 
} 

この行を使用すると、(.submit()に結合している)、フォームを保存するときに発射それを停止する

window.onbeforeunload = null; 

例2

window.addEventListener("beforeunload", function(event) { 
    if(strOnloadForm != strUnloadForm) 
     event.returnValue = "You have unsaved changes."; 
}); 

フォームを保存するときにこの行を停止するには(.submit()にバインド)

ドキュメントは、私が onbeforeunloadbeforeunloadのドキュメントを読ん

を言う

window.removeEventListener("beforeunload"); 

。 はonbeforeunloadセクションNotes下では述べている:

あなたできwindow.addEventListener()を通じて、このイベントとbeforeunloadイベントを処理する必要があります。そこにはさらに多くのドキュメントがあります。私は後者を使用すべきだと思います1

。しかしremoveEventHandlerのドキュメントは、この氏は述べています:

addEventListener()removeEventListener()古いブラウザには存在しません。スクリプトの先頭に次のコードを挿入して、これをネイティブにサポートしていない実装でaddEventListener()removeEventListener()の使用を許可することで、この問題を回避できます。 2

は、誰かがしてくださいこれらのための違い、および使用するための最良のものにいくつかの光を当てるていただけますか?https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/removeEventListener#Polyfill_to_support_older_browsers

+1

が、addEventListenerをを使用しているときは、常に「オン」の部分のまま:

あなたは、一般的に、コードのように表示されます。 – adeneo

+0

実際には同じイベントを発生させるのとはちょうど異なる方法だと思います。 –

答えて

20

window.onbeforeunload = function() {/**/}https://developer.mozilla.org/en-US/docs/Web/API/WindowEventHandlers/onbeforeunload#Notes


は、既存のハンドラをオーバーライドして、あなた自身でそれを置き換えます。

window.addEventListener("beforeunload", function() {/**/});は、新しいハンドラを追加します。

addEventListenerがより好ましい。古いブラウザ(ie:IE6、おそらくIE7)ではattachEventを使用できます。それはまったく同じイベントだ

function addEvent(object, event_type, event_handler) { 
    if (object.addEventListener) { 
     object.addEventListener(event_type, event_handler, false); 
    } else { 
     object.attachEvent("on" + event_type, handler); 
    } 
} 
+2

よろしくお願いいたします。 'onbeforeunload'はハンドラをオーバーライドするのに対し、' addEventListener'を使うと知っていればそれを追加するのは理にかなっています。 –

関連する問題