2

私はかなりajaxを多用するWebアプリを作成しました。このwindow.onbeforeunloadイベントを使用して、ユーザーによる未保存の変更があるかどうかを検出し、ユーザーがページから移動できないようにします。コードは私のinit関数によって読み込まれ、イベントをサポートするすべてのブラウザーで機能するために使用されていました。ただし、明らかな理由もなく、突然onbeforeunloadイベントがすべてのブラウザで発生しなくなりました。私はjquery1.7.1を使用していますが、さまざまな要素に(委任を介して、または直接)多くのイベントが関連付けられています。誰かがここで問題になるかもしれない手がかりを持っていますか?コードスニップは次のとおりです。

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

psコールバック内からチェックを完全に削除し、常に文字列を返す場合でも、毎回メッセージを表示する必要がありますが、それでも起動しません。コールバックをバインドする単純なページを使用して、ブラウザーがイベントで正しく機能していることを確認しました。

4

2 に答える 2

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>
于 2012-04-22T09:12:17.750 に答える
2

これの考えられる原因は、jQuery UI のオートコンプリート機能を使用していることです。1.8.17 以降のバージョンunbeforeunloadでは、既存のハンドラーを無効にする set 。

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

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

于 2012-11-26T08:09:45.343 に答える