Form validationと暗黙のsubmitの調査
HTML5には暗黙のsubmitという機能があります。
Implicit submissionなどでググると詳細は出てきますが、特定条件下ではsubmit buttonがなくてもsubmitされるようになっています。
またForm validationとは、フォーム送信前にテキストボックス内の入力内容が適切か、ブラウザ側でチェックをし、不適切であればポップアップ等で入力修正を促しフォーム送信をキャンセルする機能です。
検証
これらの挙動が、どういう条件で発動するのか・しないのかが分からなかったのでいくつかのパターンを用意して見ました。
テキストボックスは全てrequierd
とし、入力せずにフォーム送信しようとするとValidationに引っかかるようにしています。
その上で、ボタンの有無、ボタンの種類、ボタンの位置を変えることで、それぞれのフォームの挙動を確認します。
パターンは以下の表の通りです。
パターン | テキストボックスの数 | ボタン1の条件 | ボタン2の条件 |
---|---|---|---|
form1 | 1 | 存在しない | 存在しない |
form2 | 2 | 存在しない | 存在しない |
form3 | 2 | type を指定していないボタン |
存在しない |
form4 | 1 | type="submit" のボタン |
存在しない |
form5 | 1 | type を指定しないボタンclickイベントでアラート表示 |
type="submit" のボタン |
form6 | 1 | type="button" のボタンclickイベントでアラート表示 |
type="submit" のボタン |
以下の画面で、テキストボックスを選択し何も入力せずEnterキーを押下してみてください。
それぞれのフォームで挙動が異なることが見て取れると思います。
See the Pen
Implicit Submission Test by tukapiyo (tukapiyo)
on CodePen.
結果
想定される結果は、以下の通りです。
パターン | 想定される結果 |
---|---|
form1 | Form Validationが働き、エラーが表示されsubmitがキャンセルされる |
form2 | Form Validationが働かないし、そもそもsubmitされない |
form3 | Form Validationが働き、エラーが表示されsubmitがキャンセルされる |
form4 | Form Validationが働き、エラーが表示されsubmitがキャンセルされる |
form5 | アラートが表示される。Form Validationが働き、エラーが表示されsubmitがキャンセルされる ※Firefoxではエラーが表示されない |
form6 | アラートは表示されない。Form Validationが働き、エラーが表示されsubmitがキャンセルされる |
この結果から以下の事が分かります。
テキストボックス(input
)が2つ以上存在し、button
が1つも存在しない場合は暗黙のsubmitが実行されません。
→form2
暗黙のsubmitは、button
のtype
が指定されないまたはtype="submit"
のどちらの場合でも実行されます。
→form3, form4
暗黙のsubmitは、form
内の最初のbutton
が(他にtype="submit"
があったとしても)実行されます。
→form5
暗黙のsubmitは、type="button"
のbutton
は実行しません。
→form6
まとめ
暗黙のsubmitを効果的にかつ明確に実行するためには、button type="submit"
なボタンを1つだけ用意し、それ以外のbutton
には必ずtype="button"
を指定するようにしましょう。
最近のコメント