[Web]戻るボタンでフォームが残っているのが困る場合の対処

超まとめ

バックボタンで戻ったときにフォームの状態を忘れていて欲しい場合は、onpageshowイベントでreset()するといい感じ。

説明

ChromeやFirefoxでフォーム入力してSubmitとかして次の画面に遷移した後に、ブラウザの戻るボタン(バックボタン)でフォームの画面に戻ると、ユーザーが入力していたフォームデータが残っているという動作をします。

1<html>
2  <head></head>
3  <body>
4    <form method="GET" action="https://www.google.co.jp">
5      <select>
6        <option>1</option>
7        <option>2</option>
8        <option>3</option>
9        <option>4</option>
10        <option>5</option>
11        <option>6</option>
12        <option>7</option>
13        <option>8</option>
14        <option>9</option>
15        <option>10</option>
16      </select>
17      <input type="SUBMIT" value="type=submit" >
18    </form>
19  </body>
20</html>

このHTMLを表示してドロップダウンで例えば「5」を選択してsubmitし(googleに遷移します)、ブラウザのバックボタンで戻ると、ドロップダウンは「5」が選択されている状態になります。(この動作は、たぶんBack Forward Cache 機能によるものでしょう)

  1. 「5」を選んで…
    01.5を選んで
  2. ボタンを押してSubmitします。action=”https://www.google.co.jp”なので、Googleに遷移します。
    03.googleに移動する
  3. ブラウザのバックボタンで元の画面に戻ると、「5」が選択されています。
    04.「5」が選択されている

フォーム画面から進んで、戻って修正して…という通常の操作を考えると、画面遷移直前のフォーム状態を覚えていてくれるこの動作はありがたいのですが、バックボタンで戻ったときにフォームの状態を忘れていて欲しいケースもあります。

例えば、ドロップダウンのonchangeで同じページへPostして状態を変更していくケースとかだと、バックボタンで一つ前の状態に画面を戻しても、ドロップダウンの状態は最後の状態になったりするわけです。困りますね。そういう場合はバックボタンで戻ったときにフォームの状態は忘れていて欲しいということになります。

このようなケースではonpageshowイベントでフォームをリセットするといい感じになります。
こんな感じに。

1<html>
2  <head>
3  </head>
4  <body>
5    <script>
6      window.onpageshow = function(){
7        document.getElementById("f1").reset();
8      };
9    </script>
10    <form method="GET" action="https://www.google.co.jp" id="f1">
11      <select name="select">
12        <option>1</option>
13        <option>2</option>
14        <option>3</option>
15        <option>4</option>
16        <option>5</option>
17        <option>6</option>
18        <option>7</option>
19        <option>8</option>
20        <option>9</option>
21        <option>10</option>
22      </select>
23      <input type="SUBMIT" value="type=submit"/>
24    </form>
25  </body>
26</html>

注意

ターゲットブラウザで onpageshow がサポートされているか、要確認です。

One Reply to “[Web]戻るボタンでフォームが残っているのが困る場合の対処”

コメントを残す