DOMとフォーム:チェックボックス・ラジオボタンの状態取得
基本プロパティ
-
checked(boolean)
現在の選択状態。true/falseを返します。 -
value(string)
送信時に送られる値。value属性を省略すると既定で"on"になります。 -
defaultChecked(boolean)
HTML上(初期描画時)の既定状態。form.reset()で戻る先。 -
indeterminate(checkboxのみ, boolean)
3 状態 UI(半チェック)用のプロパティ専用フラグ。属性は存在しません。送信値にも影響しません(見た目だけ)。
取得時は 真偽を知りたい→
checked、送信値が欲しい→valueと覚えてください。
単体取得(1つの要素)
まとめて取得:CSSセレクタ :checked
:checked
チェックボックス(複数選択)
ラジオボタン(単一選択)
form.elements を使う(名前で参照)
form.elements を使う(名前で参照)フォームに紐づけられた要素は HTMLFormElement#elements から名前で参照できます。
送信時の収集は FormData が簡単
FormData が簡単-
同名チェックボックスは 複数値になるので
getAllを使用。 -
ラジオは 単一値で
get。
FormDataは 無効化された要素(disabled)は含めません。必要なら個別に.checkedを参照してください。
変更検知(イベント)
-
change:チェック状態が確定した時点で発火(チェックボックス/ラジオはクリックやキーボード操作直後)。 -
input:近年はほぼ同様に発火しますが、changeの方が互換実績が長いです。
イベントデリゲーション例(親に1つだけリスナを付ける):
indeterminate(三状態チェックボックス)
indeterminate(三状態チェックボックス)ツリー選択や「全選択」UIで便利です。見た目のみで送信値は変化しません。
クリックするとブラウザが自動で
indeterminateをfalseに戻す点に注意し、必要なら再設定します。
よくある落とし穴
-
valueを省略していると送信時は"on"。値で識別したいならvalueを明示。 -
checked属性とプロパティの混同-
属性:初期状態(HTML)
-
プロパティ:現在状態(JS)。動的に変わるのはプロパティ。
-
-
未選択のラジオは
querySelector('…:checked')がnull。必ず null チェックを行う。 -
disabled要素はFormDataに含まれない。状態確認は.checkedで。 -
form.reset()は現在状態を初期値(defaultChecked)に戻す。直近の選択を消したいだけなら個別に.checked=falseを設定。
ミニ実装例:選択の表示と送信データ整形
テストや型付け(TypeScriptヒント)
-
querySelector<HTMLInputElement>のジェネリクス指定で型安全に扱えます。
まとめ
-
状態の真偽は
checked、送信値はvalue。 -
複数チェックは
:checked+querySelectorAll、ラジオは 単一の:checkedを探す。 -
送信データ整形は
FormData#getAll/getが簡潔。 -
初期状態・現在状態・見た目だけの三状態(
defaultChecked/checked/indeterminate)を区別することが正確な実装の鍵です。
ChatGPT5 生成日:2025/09/11