ユーザーがページを離れる前に、保存されていない変更について警告する必要があります (かなり一般的な問題です)。
window.onbeforeunload = handler
これは機能しますが、独自のテキストを囲む煩わしい標準メッセージを含むデフォルトのダイアログが表示されます。標準メッセージを完全に置き換えてテキストが明確になるようにするか、(さらに良い方法として) jQuery を使用してダイアログ全体をモーダル ダイアログに置き換える必要があります。
今のところ私は失敗しており、答えを持っていると思われる人も誰も見つけていません。それは可能なのでしょうか?
私のページのJavascript:
<script type="text/javascript">
window.onbeforeunload = closeIt;
</script>
closeIt() 関数:
function closeIt()
{
if (changes == "true" || files == "true")
{
return "Here you can append a custom message to the default dialog.";
}
}
jQuery と jqModal を使用して、次のようなことを試しました (カスタム確認ダイアログを使用)。
$(window).beforeunload(function () {
confirm('new message: ' + this.href + ' !', this.href);
return false;
});
これも機能しません。イベントにバインドできないようですbeforeunload
。
ベストアンサー1
のデフォルトのダイアログを変更することはできないonbeforeunload
ため、そのまま操作するのが最善策です。
window.onbeforeunload = function() {
return 'You have unsaved changes!';
}
参考資料はこちらMicrosoft からのコメント:
window.event の returnValue プロパティに文字列が割り当てられると、現在のページに留まり、割り当てられた文字列を保持するオプションをユーザーに提供するダイアログ ボックスが表示されます。ダイアログ ボックスに表示される既定のステートメント「このページから移動してもよろしいですか? ... 続行するには [OK] を、現在のページに留まるには [キャンセル] を押してください。」は、削除または変更できません。
問題は次のようです:
- が呼び出されると
onbeforeunload
、ハンドラの戻り値が として取得されますwindow.event.returnValue
。 - 次に、戻り値を文字列として解析します (null でない限り)。
- は文字列として解析されるため
false
、ダイアログ ボックスが起動し、適切なtrue
/ が渡されますfalse
。
結果として、デフォルトのダイアログからそれを防ぐためにfalse
割り当てる方法はないようです。onbeforeunload
jQuery に関する追加情報:
- jQuery でイベントを設定すると、他のイベントも発生する可能性があるため、問題が発生する可能性
onbeforeunload
があります。アンロード イベントのみを発生させたい場合は、単純な JavaScript を使用することをお勧めします。 jQuery にはショートカットがないので
onbeforeunload
、汎用bind
構文を使用する必要があります。$(window).bind('beforeunload', function() {} );
編集 2018/09/04 : onbeforeunload ダイアログのカスタム メッセージは、chrome-51 以降では非推奨です (cf:リリースノート)