2012-04-22 39 views
2

私はかなりAjax-heavy Webアプリケーションを作成しました。ユーザーが保存していない変更があるかどうかを検出し、ページから移動しないようにするために、window.onbeforeunloadイベントを使用しています。コードは私のinit関数によって読み込まれ、イベントをサポートしているすべてのブラウザで動作していました。しかし、突然、onbeforeunloadイベントは、明白な理由がなく、すべてのブラウザで起動を停止しました。私はjquery 1.7.1を使用していますが、さまざまな要素(委任または直接経由)に付随するイベントがたくさんあります。誰かがここで何が問題になるかもしれないかの手がかりを持っていますか?コードスニップは次のとおりです。window.onbeforeunloadが起動しない

$(document).ready(function() { 
    window.onbeforeunload = function(e) { 
    if($(window).data("confirm") > 0) 
     return "You have unsaved changes"; 
    else 
     return null; 
    }; 
}); 

p.s.私がコールバック内からチェックを完全に削除して常に文字列を返す場合でも、毎回メッセージを表示するはずですが、それでもまだ起動しません。私は、自分のブラウザが、コールバックをバインドする単純なページのイベントで正しく動作していることを確認しました。

+1

このコードスニペットは、私には正常に見えるようなエラーが、どこか別の場所であることも可能かもしれません。おそらく、発砲していますが、ダイアログを表示していませんか? – 11684

+0

コンソールとは何ですか? – 11684

+0

〜11684:イベントは間違いなく発砲していません。コンソールに何かを印刷してみましたが、何も得られません。また、ブレークポイントを追加してデバッグしようとしましたが、ページを終了するたびに一時停止しません。問題はどこか他の場所だと思いますが、ライブラリーの1つがそうでない限り、このページのどこでもこのイベントを混乱させることはありません... hmmm – nvrs

答えて

2
<script> 
window.onbeforeunload = function (e) { 
    e = e || window.event; 

    // For IE and Firefox prior to version 4 
    if (e) { 
     e.returnValue = 'Any string'; 
    } 

    // For Safari 
    return 'Any string'; 
}; 
</script> 
+0

イベントはまだありません火災、でも私は私が示したているコードは数ヶ月のために罰金働いていたことを強調したいと思いますし、それが突然不可解私がチェックしているすべてのブラウザ – nvrs

+0

ため、停止&、それが正常に動作します。このコードを検証した。上記のコードをコピー&ペースト。ここですもちろん[フィドル](http://jsfiddle.net/gopi1410/b7MXZ/) – gopi1410

+0

それは一般的にはありませんが、それは私が構築しているWEPのアプリで私のために動作しません。おそらく、私は私の質問に言い換える必要があり、そこに知られている理由は何ですか? tは、ウィンドウを起動しないようにするでしょうか?私が言ったように、それは私のために働くために使用されたすべての突然の(私はその間にアプリに様々な機能を追加しました) – nvrs

2

これは、jQuery UIのオートコンプリート機能を使用している可能性があります。 1.8.17から始まるバージョンはunbeforeunloadに設定され、既存のハンドラは無効になります。

http://bugs.jquery.com/ticket/12061はバグが修正されましたと主張し、私のテストではjQueryのUI 1.9.2にはまだです。

http://bugs.jqueryui.com/ticket/8439は、可能な回避策を提供します。

関連する問題