<option>要素
Technical Summary
option要素は、selectの選択肢、またはdatalistの入力候補を表します。option自身はフォームコントロールではなく、親の選択モデルや入力候補モデルの中で意味を持ちます。
labelは利用者向けのラベル、valueは処理・送信用の値、selectedは初期選択の指定です。現在の選択状態は別の内部状態であるselectednessとして管理され、DOMではoption.selectedで扱います。
Definition / Categories
| 項目 | 仕様上の整理 |
|---|---|
| 意味 | selectの選択肢、またはdatalistの入力候補 |
| Categories | なし |
| Context | select、datalist、またはoptgroupの子孫 |
| Content model | labelとvalueの有無、datalist内かどうかで異なる。テキスト、または制限付きのphrasing content / div |
| Tag omission | 次のoption、optgroup、hrの直前、または親に後続内容がない場合は終了タグを省略できる。ただし通常の記述では省略しない |
labelとvalueの両方を指定したoptionは子を持たないモデルになります。labelを指定せずselect内で使う場合は、テキストまたは制限された内容を持てます。一方、datalist内ではテキストがモデルです。
Labelとvalue
仕様上、optionのラベルは、空でないlabel属性があればその値、なければtext IDL属性の値です。値はvalue属性があればその値、なければoption textを収集した結果です。
| 情報 | 解決規則 | 実装上の確認点 |
|---|---|---|
| UI label | 空でないlabel属性、なければoption.text | 表示・選択UIのラベルと、送信値を混同しない |
| Option value | value属性、なければ収集したoption text | 表示文の変更が値の変更になる可能性があるため、送信値は明示する |
| Option text | 子孫のテキストを集め、ASCII空白を除去・折りたたむ。script要素は除外 | textContentとoption.textは同じ結果とは限らない |
<select name="format">
<option value="html">HTML</option>
<option value="markdown" label="Markdown"></option>
</select>
実務上は、通常の表示名を子テキストに書き、処理で使う値をvalueに明示する形が読みやすく追跡しやすい設計です。label属性を使う特殊な形では、content modelと表示上のラベルの解決を別に確認します。
Selectednessと初期状態
selected属性は、optionのdefault selectednessを表すboolean属性です。これに対してselectednessは現在の選択状態です。ユーザー操作やoption.selectedの設定で現在状態が変わっても、HTML属性が自動的に同じ意味へ書き換わるわけではありません。
| 概念 | 意味 | DOMでの対応 |
|---|---|---|
selected属性 | HTMLに記録された初期選択の指定 | option.hasAttribute('selected') |
| default selectedness | 初期状態・リセット時の基準となる選択状態 | option.defaultSelected |
| selectedness | 現在そのoptionが選択されているかという状態 | option.selected |
| dirtiness | ユーザー操作やIDL設定後に、selected属性の変更が現在状態へ影響するかを分ける状態 | 直接の公開IDL属性ではない |
<select id="format">
<option id="html" value="html">HTML</option>
<option id="md" value="markdown" selected>Markdown</option>
</select>
const option = document.querySelector('#md');
option.defaultSelected; // true
option.selected; // 現在のselectedness
option.selected = false; // 現在状態を変更し、dirtinessを設定
multipleのないselectでは、選択状態をtrueにする処理に伴い、同じoption listの他のoptionがfalseになります。単一選択の初期化、ユーザー操作、DOM操作、リセットを比較するときは、属性と状態を分けて記録します。
Disabledとoptgroup
optionは、自身にdisabled属性がある場合、または無効なoptgroupの中にある場合にdisabledです。disabledはユーザー操作による選択を止めますが、JavaScriptによるselectednessの変更まで一律に禁止する状態ではありません。
<select name="plan">
<option value="basic">ベーシック</option>
<optgroup label="提供終了" disabled>
<option value="legacy">旧プラン</option>
</optgroup>
<option value="pro">プロ</option>
</select>
optgroupのdisabledは、そのグループ内のoptionに影響します。グループ自体は選択対象ではなく、選択されるのはoptionです。
Form submissionとform owner
optionはlisted / submittableなフォームコントロールではありません。フォーム送信のentry listを作る主体は親のselectであり、選択されたoptionの値がselectの名前と組み合わされて送信対象になります。
HTMLOptionElement.formは、option自身がform-associatedだからではなく、最近接のselectのform ownerを返します。select内にないoptionや、datalist内のoptionではnullになります。
| 構造 | option.form | フォームでの意味 |
|---|---|---|
form > select > option | 祖先form | 選択されたoptionの値はselectのentry listに関係する |
form外のselectにform属性 | selectのform owner | 同一document内でselectが関連付けられたformに従う |
datalist > option | null | 候補自体ではなく、関連するinputの値が送信対象になる |
DOM Interface
option要素はHTMLOptionElementとして公開されます。selectedとdefaultSelected、表示用のtextと送信用のvalueを目的に応じて使い分けます。
const option = document.querySelector('option');
option.disabled;
option.form;
option.label;
option.defaultSelected;
option.selected;
option.value;
option.text;
option.index;
const created = new Option('Pro', 'pro', true, false);
| API | 概要 |
|---|---|
disabled | 自身のdisabled属性を反映するboolean。実効的な無効状態は、無効なoptgroupの影響も受ける |
label | label属性を反映する文字列。未指定時はoptionのlabel解決結果 |
defaultSelected | selected属性を反映するboolean |
selected | 現在のselectednessを読み書きするboolean。設定時はdirtinessにも関係する |
value | optionの値。value属性がなければoption textから得られる |
text | 空白を整理したoption text。設定すると子の内容を置き換える |
index / form | option list内のindex、および最近接selectのform owner |
new Option() | text、value、defaultSelected、selectedの順でoptionを作るlegacy factory function |
new Option('Pro', 'pro', true)のように3引数以下で呼ぶ場合、selected属性が設定されても初期selectednessはtrueになりません。4番目の引数で初期selectednessを明示できます。
Fact / Evidence(主張 / 根拠)
仕様上の定義、状態、フォームとの関係を、主張・条件・状態・根拠位置に分けて記録します。ブラウザー実装とアクセシビリティツリーの観測は、下のImplementation Evidenceに分離しています。
| 種別 | Fact / 主張 | 条件・範囲 | 状態 | 根拠 |
|---|---|---|---|---|
| SPEC | optionはselectの選択肢、またはdatalistの入力候補を表します。 | optionの定義と使用コンテキスト。 | 確認済み | HTML Standard: the option element |
| SPEC | optionのラベルはlabel属性、なければoption textから解決され、値はvalue属性、なければ収集されたtextから解決されます。 | label / value属性の有無とtext収集アルゴリズム。 | 確認済み | HTML Standard: label and value |
| SPEC | selected属性はdefault selectednessを表し、現在のselectednessとは異なる状態です。 | ユーザー操作、IDL設定、リセット、single selectの選択モデル。 | 確認済み | HTML Standard: selectedness |
| SPEC | disabledはoption自身、またはdisabledなoptgroupから解決されます。 | ユーザー操作による選択、DOMからの状態変更、optgroup境界。 | 確認済み | HTML Standard: disabled |
| SPEC | optionはフォームコントロールのカテゴリではなく、option.formは最近接selectのform ownerを返します。 | select内、datalist内、form ownerの有無。 | 確認済み | HTML Standard: form IDL |
Evidence
- HTML Standard: The option element — context、content model、属性、selectedness、label、value、DOM interface
- HTML Standard: The select element — option list、single / multipleの選択モデル、リセット、フォーム送信との関係
- HTML Standard: The datalist element — optionを入力候補として使う場合の関係
- HTML Accessibility API Mappings — option role、selected state、disabled stateのアクセシビリティAPI境界
- Web Platform Tests: select element — option、selectedness、selectの動作を検証するテスト群の入口
Implementation Evidence
仕様上の主張とは別に、ブラウザー実装・WPT・アクセシビリティ観測を記録します。今回のページ作成時点では、未実施の項目を確認済みとは扱いません。
共通fixture / 記録: fixture ID forms-core-v1で、initial selectedness、selectedness変更とreset、label / value / text、disabled optionとdisabled optgroup、select経由のFormData、datalist内option、HTMLOptionElement APIを確認しました。Chrome 152.0.0.0 / Windows 10 / 確認日 2026-09-15。14項目中14項目がpassです。
| 種別 | 再現確認の範囲 | 記録する条件 | 状態 |
|---|---|---|---|
| IMPL | label、value、text、defaultSelected、selected、index、form、disabled、reset後のselectedness | Chrome 152.0.0.0 / Windows 10でfixture ID forms-core-v1を実行。selected属性を残したままIDLのselectedを変更でき、form resetで復元。label・value・text・indexとform ownerを取得し、disabled optgroupのoptionはdisabled=falseでも:disabled、disabled optionはFormDataから除外。single / multipleの選択値、datalist option、外部selectのform ownerも確認 | 確認済み(Chrome 1台) |
| WPT | option、selectedness、disabled、selectのoption list、form submissionに関係するテストとの対応と実行結果 | select element test directoryから、option-selectedness-script-mutation.html、select-selectedOptions-and-value.html、select-validity.htmlを実行。2026-09-15 / Chrome 152.0.0.0 / Windows NT 10.0 / wpt.liveで12/12 pass。ディレクトリ内の残りのテストと他ブラウザーは未評価 | 部分実行(12/12 pass) |
| AAM | single / multiple select内optionのselected・disabled状態、selectの公開role、datalist入力の公開状態 | Chrome 152.0.0.0 / Windows 10 / 2026-09-15 / fixture ID forms-core-v1。idle AX treeでsingle selectはlabel付きのcollapsed pop-up button、multiple selectはlistとして公開され、選択済み・disabledのoption状態も反映。datalist付きinputはcombo boxとして公開されたが、候補optionの展開状態は未観測 | 観測済み(idle AX tree) |
今回のIMPLはChrome 1環境のDOM・フォームAPI実測です。WPTの実行結果とAAMの観測結果が揃うまでは、ブラウザー間共通の実装結果として登録しません。
Coverage / Open Issues
- 確認済みoptionの意味、Categories、使用コンテキスト、content model、主要属性
- 確認済みlabel / valueの解決、selected属性とselectedness、disabled optionとdisabled optgroupの仕様上の境界
- 確認済みHTMLOptionElementの主要IDL、selectのフォーム送信との関係、datalist内optionの位置付け
- 未完了Chrome 1環境以外でのselectedness初期化、属性変更、option list更新、disabled option、FormDataの比較
- 未完了WPTの個別テスト実行結果、HTML-AAM全mapping、datalist候補の展開状態、支援技術ごとの観測
- 未完了customizable select、先頭button、selectedcontent、option内の拡張content model、歴史的変更と互換性
このページは初期Coverageです。確認済みの範囲を示すものであり、すべてのブラウザーで同じ表示・操作・アクセシビリティAPI結果になること、またはoption要素全体の検証が完了したことを主張しません。
Related surface
初心者向けの選択肢の作り方、表示名と送信値、selected / disabledの使い方はYugienのoption要素ページを参照してください。選択モデル全体はAtlasのselect要素、フォーム送信の共通処理はAtlasのform要素、ラベルとの関係はAtlasのlabel要素でも確認できます。