開発したフォームの2重送信が発生していたり、Enterを押しても送信されないということがありました。onClick
に設定していたJSが意図せず発火していた、button要素にtypeを指定していなかった等々。そこで、本記事では意図せぬイベントの発火・未発火などを防ぐためにフォームにおける<input>
と<button>
についてまとめます。
以下のようなフォームを例に挙げます。
このフォームは以下のようなHTMLで構成されているとします。
<form>
<p>名前</p>
<input />
<p>メールアドレス</p>
<p>お問い合わせ</p>
<input />
<button>戻る</button>
<button>送信</button>
</form>
ここで名前、メールアドレス、お問い合わせを入力して Enterキー を押すと何が起きるでしょうか?
正解は
「戻るボタンのみのclickイベントが発火し、フォームのsubmitイベントが発火する」
です。
Enterを押した時に戻るボタンではなく送信ボタンが押されるようにするには以下のようにするべきでした。
<form>
<p>名前</p>
<input />
<p>メールアドレス</p>
<input />
<p>お問い合わせ</p>
<input />
<button type="button">戻る</button>
<button>送信</button>
</form>
では、以下のような構成にした場合にお問い合わせを入力した後Enterを押すと何が起きるでしょうか?
<form>
<p>お問い合わせ</p>
<input />
<button type="button">送信</button>
</form>
submitボタンがないし、Enterを押しても何も起こらない?送信ボタンがclickされた判定にはなるけどsubmitはされない?
正解は
「送信ボタンのclickイベントは発火せず、フォームのsubmitイベントが発火する」
です。
type=button
が指定されたボタンがEnterキーでclickイベントが発火することはありません。onsubmit=return false;
を指定して、buttonタグのonClick
でsubmitする等の工夫が必要になります。type=button
のボタンはEnterではclickイベントは発火しない