超まとめ
バックボタンで戻ったときにフォームの状態を忘れていて欲しい場合は、onpageshowイベントでreset()するといい感じ。
説明
ChromeやFirefoxでフォーム入力してSubmitとかして次の画面に遷移した後に、ブラウザの戻るボタン(バックボタン)でフォームの画面に戻ると、ユーザーが入力していたフォームデータが残っているという動作をします。
<html> <head></head> <body> <form method="GET" action="https://www.google.co.jp"> <select> <option>1</option> <option>2</option> <option>3</option> <option>4</option> <option>5</option> <option>6</option> <option>7</option> <option>8</option> <option>9</option> <option>10</option> </select> <input type="SUBMIT" value="type=submit" > </form> </body> </html>
このHTMLを表示してドロップダウンで例えば「5」を選択してsubmitし(googleに遷移します)、ブラウザのバックボタンで戻ると、ドロップダウンは「5」が選択されている状態になります。(この動作は、たぶんBack Forward Cache 機能によるものでしょう)
- 「5」を選んで…
- ボタンを押してSubmitします。action=”https://www.google.co.jp”なので、Googleに遷移します。
- ブラウザのバックボタンで元の画面に戻ると、「5」が選択されています。
フォーム画面から進んで、戻って修正して…という通常の操作を考えると、画面遷移直前のフォーム状態を覚えていてくれるこの動作はありがたいのですが、バックボタンで戻ったときにフォームの状態を忘れていて欲しいケースもあります。
例えば、ドロップダウンのonchangeで同じページへPostして状態を変更していくケースとかだと、バックボタンで一つ前の状態に画面を戻しても、ドロップダウンの状態は最後の状態になったりするわけです。困りますね。そういう場合はバックボタンで戻ったときにフォームの状態は忘れていて欲しいということになります。
このようなケースではonpageshowイベントでフォームをリセットするといい感じになります。
こんな感じに。
<html> <head> </head> <body> <script> window.onpageshow = function(){ document.getElementById("f1").reset(); }; </script> <form method="GET" action="https://www.google.co.jp" id="f1"> <select name="select"> <option>1</option> <option>2</option> <option>3</option> <option>4</option> <option>5</option> <option>6</option> <option>7</option> <option>8</option> <option>9</option> <option>10</option> </select> <input type="SUBMIT" value="type=submit"/> </form> </body> </html>
注意
ターゲットブラウザで onpageshow がサポートされているか、要確認です。
One Reply to “[Web]戻るボタンでフォームが残っているのが困る場合の対処”