[解決済み] [Solved] 変更がコミットされたときに "Are you sure you want to navigate away from this page?" を表示する方法は?
質問
stackoverflowでは、変更を加えてからページから移動しようとすると、javascriptの確認ボタンが表示され、「本当にこのページから移動しますか」と尋ねられます。
どなたか実装されたことのある方、変更がコミットされたことをどのように追跡すればよいでしょうか? 私は自分自身でこれを行うことができると信じて、私は専門家のあなたから良い慣行を学びたいと考えています。
以下を試しましたが、まだうまくいきません。
<html>
<body>
<p>Close the page to trigger the onunload event.</p>
<script type="text/javascript">
var changes = false;
window.onbeforeunload = function() {
if (changes)
{
var message = "Are you sure you want to navigate away from this page?\n\nYou have started writing or editing a post.\n\nPress OK to continue or Cancel to stay on the current page.";
if (confirm(message)) return true;
else return false;
}
}
</script>
<input type='text' onchange='changes=true;'> </input>
</body>
</html>
どなたか例を載せていただけませんか?
どのように解決するのですか?
アップデート(2017年)
最近のブラウザは、カスタムメッセージの表示をセキュリティ上の危険と見なすようになり、そのため、現在では 削除 をすべて削除しました。現在では、ブラウザは一般的なメッセージしか表示しません。メッセージの設定に悩む必要がなくなったので、以下のようにシンプルになりました。
// Enable navigation prompt
window.onbeforeunload = function() {
return true;
};
// Remove navigation prompt
window.onbeforeunload = null;
レガシーブラウザへの対応については、以下をお読みください。
更新情報(2013年)
オリジナルの回答はIE6-8とFX1-3.5(これが書かれた2009年当時のターゲットでした)に適していますが、現在はかなり古く、現在のブラウザのほとんどで動作しません - 参考までに以下に残しておきます。
その
window.onbeforeunload
は、すべてのブラウザで一貫して扱われているわけではありません。文字列ではなく関数参照にすべきですが(元の回答通り)、古いブラウザでは、ほとんどのブラウザのチェックは、何かが
onbeforeunload
(を返す関数を含む)。
null
).
を設定します。
window.onbeforeunload
を関数参照に設定する必要がありますが、古いブラウザの場合は
returnValue
を返すだけでなく、イベントの
var confirmOnPageExit = function (e)
{
// If we haven't been passed the event get the window.event
e = e || window.event;
var message = 'Any text will block the navigation and display a prompt';
// For IE6-8 and Firefox prior to version 4
if (e)
{
e.returnValue = message;
}
// For Chrome, Safari, IE8+ and Opera 12+
return message;
};
を持つことはできません。
confirmOnPageExit
を実行し、メッセージなしでユーザーを続行させたい場合は null を返します。確実にオン・オフを切り替えるには、やはりイベントを削除する必要があります。
// Turn it on - assign the function that returns the string
window.onbeforeunload = confirmOnPageExit;
// Turn it off - remove the function entirely
window.onbeforeunload = null;
オリジナルの回答(2009年作業)
オンにするには
window.onbeforeunload = "Are you sure you want to leave?";
オフにするには
window.onbeforeunload = null;
これは通常のイベントではないので、標準的な方法でバインドすることができないことに注意してください。
値をチェックするため?それはあなたのバリデーションフレームワークに依存します。
jQueryでは、次のようなものになります(非常に基本的な例です)。
$('input').change(function() {
if( $(this).val() != "" )
window.onbeforeunload = "Are you sure you want to leave?";
});
関連
-
[解決済み】node.js TypeError: path must be absolute or specify root to res.sendFile [JSONのパースに失敗しました]。
-
[解決済み】Failed to load resource: net::ERR_FILE_NOT_FOUND loading json.js
-
[解決済み】webpack-dev-serverにリモート接続すると、「Invalid Host header」というメッセージが表示されます。
-
[解決済み】Javascriptのコールバック関数がFirefoxで「Callback is not a function」というエラーを投げる
-
[解決済み】「Uncaught TypeError: Chromeで "Illegal invocation "が発生する。
-
[解決済み] ローカルファイルを開くことができません - Chrome: ローカルリソースのロードが許可されていません
-
[解決済み】DOMException: サポートされているソースが見つからなかったため、読み込みに失敗しました。
-
[解決済み】Uncaught TypeError: 未定義のプロパティ 'msie' を読み取れない - jQuery tools
-
[解決済み】react router v^4.0.0 Uncaught TypeError: 未定義のプロパティ'location'を読み取れない
-
[解決済み] フレームバスターバスター ... バスターコード必要
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】React Js: Uncaught (in promise) SyntaxError: 位置 0 の JSON で予期しないトークン < が発生しました。
-
[解決済み] Uncaught Invariant Violation: 前のレンダリング中よりも多くのフックをレンダリングした
-
[解決済み】BootstrapのCollapseが折りたたまれない
-
[解決済み】Reactのeslintエラーはpropsの検証で見つからない
-
[解決済み】エラー:リクエストのエンティティが大きすぎる
-
[解決済み】リソースはドキュメントと解釈されるが、MIMEタイプはapplication/zipで転送される
-
[解決済み】TypeError: res.status は関数ではありません。
-
[解決済み】未定義のプロパティ 'forEach' を読み取ることができない
-
[解決済み] onbeforeunload関数内でカスタムダイアログボックスを使用して、ページの再読み込みを確認する。ボックスがポップアップする前にonbeforeunload関数内で実行されるコード [複製].
-
[解決済み] JavaScriptでWebページが移動しないようにする