14

以下の Stack Overflow のような確認ダイアログの結果をキャプチャする方法はありwindow.onbeforeunloadますか (これは、質問を投稿せずに「質問する」ページを離れたときに発生します)。

Chrome ではこのように表示されます。他のブラウザでは少し異なると思いますが、常に何らかの形の yes/no ボタンが表示されます。

window.onbeforeunload 確認ダイアログ

おそらく、イベントがトリガーされた後も問題のあるページにまだいる場合、彼らはとどまることを選択し、おそらくjsのシーケンスを見ることでこれを理解できます. ただし、「このページを離れる」をクリックしたかどうかを判断する方法を知りたいですか?

私はこれを以下のように実装しました:

// concept taken from SO implementation
function setConfirmUnload(showMessage, message) {
    window.onbeforeunload = showMessage ? (message ? message : "this is a default message") : null;
}

// pseudo code
listen to changes on inputs
if any inputs fire a change event
   call setConfirmUnload(true, 'My warning message')

サイト内でjQueryを使用していることに注意してください。

私は本質的にGmailのような下書きの実装を実装しようとしています.ユーザーがフォームを保存せずに変更を加えたページを離れると、同様のダイアログが表示されます. 彼らが変更を破棄してページを離れることを選択した場合、データベースからいくつかの一時レコードをクリーンアップする必要があります (私は AJAX 呼び出しを考えているか、deleteフラグを付けてフォームを送信するだけです)。

私の質問は以下にも関連しています:

手動更新でページを取得した後に起動する onunload ハンドラでの jQuery AJAX 呼び出し。onunload が最初に発生することを保証するにはどうすればよいですか?

4

3 に答える 3

6

これはどう:

$( window ).bind( 'beforeunload' , function( event ) {
    setTimeout( function() {
        alert( 'Hi againe!' );
    } );
    return '';
} ).bind( 'unload', function( event ) {
    alert( 'Goodby!' );
} );
于 2013-06-05T19:10:47.830 に答える
5

window.onbeforeunloadを使用して終了確認を行うことはできますが、ユーザーがクリックしたボタンを見つける方法はありません。

このスレッドから jvenema からの以前の応答を引用するには:

beforeunload の主な目的は、変更が失われる前に変更を保存するオプションをユーザーに許可することなどです。

その上、ユーザーが去ってしまったら、もう手遅れです [...]

于 2011-03-23T02:04:38.007 に答える