テーマ、知りたいこと
HTMLの<input type="radio">
について、「グループ内の連動を行う」「フォーム送信に値は載せない」「未チェックのままだと、フォーム送信時に送信を阻止して、invalid
イベントを反応させる」の3つすべてを満たす方法は存在するのか
状況
フォーム内に「フォーム送信はしたくないけど必須のバリデーションは当てたいラジオボタン」が存在していたので、<input type="radio" required>
に、form="でたらめなID"
と足していました。ところが、いつしか別フォームを指す<input>
要素ではフォーム送信を止められない状態となってしまっていました。
ふつうのフォーム要素ならname
を未設定とすれば、フォーム送信に値が入らなくなるので何ら問題はありません。ところが、ラジオボタンの場合にはname
が「フォーム送信時のキー」以外に「複数のボタンを連動させるためのキー」としても使われているので、同じキーを設定せざるを得ません。
参考HTML
html
1<form action="#"> 2 <label> 3 <input type="radio" name="foo" form="dummy" required> 4 hoge 5 </label> 6 <label> 7 <input type="radio" name="foo" form="dummy" required> 8 piyo 9 </label> 10 <!-- ラジオボタンを非選択のままにしても、送信が止まらない --> 11 <input type="submit"> 12</form> 13<!-- idに合致するformを置いても改善せず --> 14<form action="" id="dummy"></form>
考えたこと
とりあえず、以下のような策は考えています。
- 適当な
name
で値が送信されてしまうのは無視する name
をセットせずに、ラジオボタン同士のチェック制御もJavaScriptで行うform
をセットしたままでも:invalid
セレクタで拾うことは可能なので、フォーム送信時のエラーハンドリングを自前で行う
なお、value
なしではkey=on
として送信が行われるし、value=""
と明示してもkey=
がフォーム送信の値に入ってしまうため、対策となりませんでした。
これらより簡潔、かつ値がフォーム送信されないような手段がありましたらご教示いただけましたら幸いです。
環境
ブラウザ運用なので、Chrome、Firefox、Safari、Edgeの各最新版で動かすことを念頭に置いています。

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2025/07/03 07:30
2025/07/04 08:44
2025/07/04 08:44