小さな問題があります。私は、ウィンドウのOnUnLoadイベントをキャッチして確認の質問をしようとしています。ユーザーが問題なく滞在したいと判断した場合、ページを離れたい場合は、未保存のデータがすべて失われます。ここに問題があります...
私はjQuery UIダイアログを使用しており、ページに次のコードを配置すると、ダイアログが開き、ブラウザーの戻るボタンをクリックしても、msgboxがポップアップしません。ページを更新するだけです:
<script type="text/javascript">
$(window).bind('beforeunload', function() {
alert('you are an idiot!');
}
);
</script>
そして、私が使用しているソリューションは、ポスト ここ でした。繰り返しますが、jQuery UIダイアログを開いていない場合、msgboxは正常に表示されます。実行すると、msgboxは表示されず、ページが更新されます。
何か案は?
アラートを表示する正しい方法は、単に文字列を返すことです。 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
特定のフォームを送信して、ページを離れる例外を作成することもできます。
$(window).bind('beforeunload', function(){
return "Do you really want to leave now?";
});
$("#form_id").submit(function(){
$(window).unbind("beforeunload");
});
これは私のために働く
$(window).bind('beforeunload', function() {
return 'Do you really want to leave?' ;
});
これは私のために働く:
window.addEventListener("beforeunload", function(event) {
event.returnValue = "You may have unsaved Data";
});
jQuery APIは特にbeforeunloadにバインドしないように指示し、代わりにwindow.onbeforeunloadに直接バインドする必要があります。jQueryでbeforeunloadにバインドしているため、かなり悪いメモリに出くわしました。
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>