web-dev-qa-db-ja.com

jQuery UIダイアログOnBeforeUnload

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

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

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

そして、私が使用しているソリューションは、ポスト ここ でした。繰り返しますが、jQuery UIダイアログを開いていない場合、msgboxは正常に表示されます。実行すると、msgboxは表示されず、ページが更新されます。

何か案は?

64
clockwiseq

アラートを表示する正しい方法は、単に文字列を返すことです。 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

111

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

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

$("#form_id").submit(function(){
    $(window).unbind("beforeunload");
});
43
Tomáš Mleziva

これは私のために働く

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

これは私のために働く:

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

jQuery APIは特にbeforeunloadにバインドしないように指示し、代わりにwindow.onbeforeunloadに直接バインドする必要があります。jQueryでbeforeunloadにバインドしているため、かなり悪いメモリに出くわしました。

1
Thomas

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>
0
atik sarker