ページを移動(離脱)するときにjQueryで警告を出す方法
Facebookなどでフォーム入力中にページを移動(離脱)しようとすると警告が表示されます。
この仕組みをjQueryで実装する方法を紹介します。jQueryは投稿時点の最新バージョン1.9.1を利用しています。
1.ページを移動するときに警告を出す
ページを移動するときに警告を出すには、onイベントにbeforeunloadイベントを設定します。
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script>
$(function(){
$(window).on('beforeunload', function() {
return '投稿が完了していません。このまま移動しますか?';
});
});
</script>
<form method="post" action="foo.cgi">
<input type="text" value="" />
<input type="submit" value="送信" />
</form>
ブラウザによってはreturn時の文字列が表示されます。下のスクリーンショットはGoogle Chromeの例です。
beforeunloadは、unloadしていいかどうかを尋ねるためのイベントで、HTML5の6.1.6に掲載されています。
2.フォーム送信時に警告が出ないようにする
1項の実装だけではフォーム送信時にも警告が出てしまいます。
フォーム送信時に警告が出ないようにするには、例えばclickイベントを使って、送信時にbeforeunloadイベントを無効にします。
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script>
$(function(){
$(window).on('beforeunload', function() {
return '投稿が完了していません。このまま移動しますか?';
});
$("input[type=submit]").click(function() {
$(window).off('beforeunload');
});
});
</script>
<form method="post" action="foo.cgi">
<input type="text" value="" />
<input type="submit" value="送信" />
</form>
3.フォームに入力があったときだけ警告を出すようにする
2項までの実装だけでは、フォームの入力有無に関わらず警告が出てしまいます。
フォームに入力があったときだけ警告を出すようにするには、1項で実装したonイベントをフォームのchangeイベントなどでラップします。
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script>
$(function(){
$("input[type=text]").change(function() {
$(window).on('beforeunload', function() {
return '投稿が完了していません。このまま移動しますか?';
});
});
$("input[type=submit]").click(function() {
$(window).off('beforeunload');
});
});
</script>
<form method="post" action="foo.cgi">
<input type="text" value="" />
<input type="submit" value="送信" />
</form>
これで次のような挙動になります。
- フォームに入力がない場合にページ移動:警告非表示
- フォーム入力後にページ移動:警告表示
- フォーム送信時:警告非表示
フォームの入力文字が空になったらbeforeunloadイベントをoffにするように変更すれば、よりきめ細かい制御ができると思います。
Posted by yujiro このページの先頭に戻る
- jQuery+ajaxでモーダルのコンテンツを取得する方法
- jQueryでパスワードの表示・非表示を切り替えるサンプル
- jQueryでファイル選択時にプレビュー表示する方法
- ラジオボタンをjQueryで解除する方法
- テーブルのセルをポイントすると行と列を反転表示するjQueryプラグイン「Table Hover」
- jQueryで親ページからiframeのスクロールバーを非表示にする方法
- jQueryのカスタムビルドが簡単にできるサービス「jQuery Builder」
- jQueryでCSSをまとめて書き換える方法のまとめ
- 親ページからiframe内の要素にCSSを適用させる方法
- jQueryで要素を削除する方法のまとめ
- jQueryでテキストを追加するたびにスクロールさせる方法
- jQuery.ajax()でファイルをアップロードする方法
- preventDefault()で無効にしたイベントを有効にする方法
- jQueryで要素数を取得する方法のまとめ
- jQueryやJavaScriptでパスワードフィールドの文字を表示する方法
トラックバックURL
コメントする
greeting