ブラウザでページ移動前に確認メッセージを表示

 ブラウザ上で入力または編集中に他のページへのリンクを誤って押して入力中のページが閉じて入力したものが消えてしまうという経験をした方は多いのではないでしょうか。ここでは、Wordpressで他のページへ移動する前に確認メッセージを表示させて、OKの場合に移動方法を紹介します。

カスタムHTMLを追加

 ブロックを追加で、カスタムHTMLを選択すると、下の画面になるので、HTMLを編集をクリックします。

カスタムHTML追加のスクリーンショット

JavaScriptコードに以下を記述します。

 【概要】

 ページをアンロード(他のページに移動、ページを閉じるなどで現在表示しているページが消える)する前に「onbeforeunload」イベントが発生します。その時に「このサイトを離れますか?」のダイアログを表示して「はい」が選択された時にページを離れます。

【詳細】

 onbeforeunload時に確認メッセージを表示させます。ただし、フォームに入力が無い場合は、ページがアンロードされても問題がないので、確認メッセージを表示しないようにします。そのコードの説明をします。

  • ➃でonbeforeunloadイベント時に実行される関数を登録します。
  • その関数で、Event オブジェクトの returnValue プロパティに何らかの値を設定します。これにより、確認ダイアログが表示されます。
  • フォームが変更された、フォームに入力があった時に、①と②でisFormChangeフラグがtrueになります。このフラグで確認メッセージを表示するか否かを判断します。

 このコードは文字を入力後に送信を行うcontactform7を想定しています。このため、送信ボタンを押したら、ページがアンロードされても問題がないので、確認メッセージを表示しないようにします。そのコードの説明をします。

  • ➂で送信ボタンが押された時に発生するイベント時に、実行される関数を登録します。
  • その関数に、ページがアンロードされる前のイベントを無効にするコード「window.onbeforeunload=null」を実装します。
  • その関数を「document.addEventListener」に追加します。
// フォームに入力があった時にTrueになるフラグ
isFormChange = false;

// フォームに入力があった時にフラグを立てる 
document.addEventListener('input', function (event) {
  if (event.target.closest('.wpcf7')) {
    isFormChange = true;
  }
});

// フォームに変更があった時にフラグを立てる 
document.addEventListener('change', function (event) {
  if (event.target.closest('.wpcf7')) {
    isFormChange = true;
  }
});

// 送信ボタンが押されたイベント 
document.addEventListener( 'wpcf7mailsent', function( event ) {
    // ページがアンロードされる前に
    // 発生するイベントを無効にする
  window.onbeforeunload=null;
}, false );

// ページがアンロードされる前に発生するイベント 
window.onbeforeunload = function(e) {
    // フォームに入力があった時、
    // このサイトを離れますか?のダイアログを表示
    // してその結果を返す
    if (isFormChange) {
        e.returnValue = " ";
    }
}
Journalへ戻るのLinkアイコン
Homeへ戻るのLinkアイコン

ブラウザでページを閉じる前に確認メッセージを表示

 ブラウザ上で入力または編集中に閉じるボタンを誤って押して入力中のページが閉じて入力したものが消えてしまうという経験をした方は多いのではないでしょうか。ここでは、Wordpressで閉じるボタンをクリックしたら確認メッセージを表示させて、OKの場合にページを閉じる方法を紹介します。

 この方法は、閉じるボタンではなく他へのリンクをクリックした場合には確認メッセージは表示されません。その場合も表示させたい時は、「ブラウザでページ移動前に確認メッセージを表示」の方が良いです。

カスタムHTMLを追加

 ブロックを追加で、カスタムHTMLを選択すると、下の画面になるので、HTMLを編集をクリックします。

HTMLコードに以下を記述します。

「閉じる」と表示されたボタンを表示させ、ボタンがクリックされたらdisp()関数を呼び出します。

< input type="button" value="閉じる" onclick="disp()">
JavaScriptコードに以下を記述します。

disp()関数本体です。「Windowを閉じても宜しいですか?」と表示された確認ダイアログを表示します。ダイアログで「はい」が選択されたらresultに「true」が、「いいえ」が選択されたら「false」が入ります。「はい」が選択された時にWindowを閉じます。

function disp()
{
    var result = window.confirm('Windowを閉じても宜しいですか?');
    
    if( result ) {
        //「true」の処理
       window.close();
    }
    else {
        //「false」の処理
    }
}
Journalへ戻るのLinkアイコン
Homeへ戻るのLinkアイコン