64

小さな問題があります。ウィンドウのOnUnLoadイベントをキャッチして確認の質問をしようとしています。ユーザーがそのままにしておきたいと判断した場合は問題なく、ページを離れたい場合は保存されていないデータがすべて失われます。ここに問題があります...

jQuery UIダイアログを使用しています。ページに次のコードを配置すると、ダイアログが開き、ブラウザーの[戻る]ボタンをクリックしても、msgboxがポップアップ表示されません。ページを更新するだけです。

<script type="text/javascript"> 
    $(window).bind('beforeunload', function() { 
            alert('you are an idiot!'); 
        } 
    );
</script>

そして、私が使用している解決策は、ここに投稿されました。繰り返しますが、jQuery UIダイアログを開いていない場合、msgboxは正常に表示されます。そうした場合、msgboxは表示されず、ページが更新されるだけです。

何か案は?

4

6 に答える 6

111

アラートを表示する正しい方法は、単に文字列を返すことです。alert()自分でメソッドを呼び出さないでください。

<script type="text/javascript">
    $(window).on('beforeunload', function() {
        if (iWantTo) {
            return 'you are an idiot!';
        }
    }); 
</script>

参照:https ://developer.mozilla.org/en-US/docs/Web/Events/beforeunload

于 2009-12-11T17:08:44.660 に答える
43

特定のフォームを送信して、ページを離れることを例外にすることもできます。

$(window).bind('beforeunload', function(){
    return "Do you really want to leave now?";
});

$("#form_id").submit(function(){
    $(window).unbind("beforeunload");
});
于 2011-06-17T12:14:57.527 に答える
14

これは私のために働く

$(window).bind('beforeunload', function() {
      return 'Do you really want to leave?' ;
});
于 2010-10-28T10:05:06.033 に答える
1

jQuery APIは、特にbeforeunloadにバインドせず、代わりにwindow.onbeforeunloadに直接バインドする必要があると言っていますが、jQueryでbeforeunloadにバインドしたこともあり、かなり悪いメモリに遭遇しました。

于 2011-03-28T17:00:28.797 に答える
1

これは私のために働きます:

window.addEventListener("beforeunload", function(event) {
  event.returnValue = "You may have unsaved Data";
});

于 2016-05-18T22:03:01.290 に答える
0

ASP.NET MVCの場合、特定のフォームを送信してページを離れることを例外とする場合は、次のようにします。

フォームIDを設定します。

@using (Html.BeginForm("Create", "MgtJob", FormMethod.Post, new { id = "createjob" }))
{
  // Your code
}



<script type="text/javascript">

  // Without submit form
   $(window).bind('beforeunload', function () {
        if ($('input').val() !== '') {
            return "It looks like you have input you haven't submitted."
        }
    });

    // this will call before submit; and it will unbind beforeunload
    $(function () {
        $("#createjob").submit(function (event) {
            $(window).unbind("beforeunload");
        });
    });

</script>
于 2017-04-28T19:28:07.240 に答える