buttonタグの落とし穴


ウノウさんやPHPSPOT開発日誌さんでも紹介され、私も普段大いに活用させてもらっているbuttonタグだが、ものすごく今更ながらに、万能でもないことがわかった。


何かというと、
enter(return)キーで、submitされてしまうこと。


ちなみに、同form内にinput(textなど)タグを使用しているとき。


これは別にbuttonタグだから、というわけでもない。
input のtype="submit"でも、同様の問題がある。
が、いかんせん、inputタグの方は、いわば標準的なボタンのタグなので、JavaScriptなどを使い対応されている方も多い。


また、enterキーがsubmit扱いになるのは、ブラウザどころかOSレベルでの仕様だったりもする。
けど、たとえば、コミュニティサイト新規開発において、会員登録させたい場合、idやメールアドレスを入力させたいことも多いだろう。
このような入力項目の半角英数文字。
ユーザとしては、まだ日本語入力をしているつもりで、ついつい「文字確定」のつもりでenter(return)キーを押下してしまうことがある。
するとフォームが送信されてしまい、確認画面に行くか、未入力項目があってエラーを返されたりするのだ。
仕様とはいえ、あまりユーザビリティはよくない。


この問題にぶち当たった案件では、最初からHTMLでのsubmitは行わずに、JavaScriptによるフォーム内容送信を行うつもりでいたので、とりあえず

  • buttonタグのtype="submit"をtype="button"に変更
  • buttonタグをonClickした際にJSによるform送信

を行うようにした。


ミソとしては、buttonタグから、type="submit"をとるだけでもIEでは、submit扱いが解除されると言うこと。
ただ、Firefoxでは、きちんとtype="button"を明言してあげないと、buttonタグ=submitするもの、として考えてしまうようだ。


つまり、Safariさんは、これでもまだまだreturnキー(Macですから)を押下すると、submitしようとする。
SYNCKGRAPHICA様が考えられている
ENTER押されたらフォーカスを次へ
が使えそうな気もするが、これもやはりinputタグをベースに作られているので、buttonタグには効かない。
改造すれば効きそうだけど、それはまた時間があるときに……。


ここまで書いていて気が付いた。
どうぜJSでsubmitするのであれば、aタグとかでボタンっぽくしておいてもいい訳か……。
いちおうform内のボタンなので、buttonタグを使っているが……うーん、aタグを使うと、なんか甘えのような気がするしなあ。