HTML / Element / Initial coverage

<option>要素

状態: 初期Coverage 対象: HTML Living Standard 仕様確認日: 2026-09-25

Technical Summary

option要素は、selectの選択肢、またはdatalistの入力候補を表します。option自身はフォームコントロールではなく、親の選択モデルや入力候補モデルの中で意味を持ちます。

labelは利用者向けのラベル、valueは処理・送信用の値、selectedは初期選択の指定です。現在の選択状態は別の内部状態であるselectednessとして管理され、DOMではoption.selectedで扱います。

Definition / Categories

項目仕様上の整理
意味selectの選択肢、またはdatalistの入力候補
Categoriesなし
Contextselect、datalist、またはoptgroupの子孫
Content modellabelとvalueの有無、datalist内かどうかで異なる。テキスト、または制限付きのphrasing content / div
Tag omission次のoption、optgroup、hrの直前、または親に後続内容がない場合は終了タグを省略できる。ただし通常の記述では省略しない

labelとvalueの両方を指定したoptionは子を持たないモデルになります。labelを指定せずdatalistの外で使う場合はphrasing contentやdivを含められますが、interactive content、子孫のdatalist・object、tabindexを持つ子孫は置けません。labelがありvalueがない場合、およびdatalist内では、content modelはtextです。

Labelとvalue

仕様上、optionのラベルは、空でないlabel属性があればその値、なければtext IDL属性の値です。値はvalue属性があればその値、なければoption textを収集した結果です。

情報解決規則実装上の確認点
UI label空でないlabel属性、なければoption.text表示・選択UIのラベルと、送信値を混同しない
Option valuevalue属性、なければ収集した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と表示上のラベルの解決を別に確認します。

リッチなoption内容とselectedcontent

select内のoptionは、content modelが許す場合に画像やphrasing要素などの構造化された内容を持てます。single-selectの先頭button内にあるselectedcontentは、選択中optionの子ノード構造を複製して表示します。optionのlabel属性の文字列は複製しません。そのためlabel解決規則と、選択buttonに表示される子要素構造は関連しますが、同じものではありません。

<select name="language">
  <button type="button">
    <selectedcontent></selectedcontent>
  </button>
  <optgroup>
    <legend>標準仕様</legend>
    <option value="html"><span>HTML Standard</span></option>
    <option value="css"><img src="css.svg" alt=""><span>CSS UI</span></option>
  </optgroup>
</select>
場合content model / 更新規則確認する点
labelなしでdatalist外のselect optionphrasing contentまたはdivを含められる。interactive contentとtabindexを持つ子孫は禁止構造化した内容を含めても、option自体はinteractive widgetではない
option label="…" value="…"content modelは空子markupが選択buttonへ表示されるとは限らない
有効なselectedcontentを持つsingle-select選択中optionの子ノードを複製する。optionのlabel属性は複製しない選択変更後に複製されたmarkupを確認する
multiple selectまたはdatalist内のoptionmultiple selectではselectedcontent更新アルゴリズムは使われない。datalist内のoptionはtext-onlycustomizable selectのmarkupをdatalist候補に一般化しない

選択されたoptionのvalueはフォーム値として保たれ、子markupは表示内容です。リッチなoption内容に対するブラウザーや支援技術の扱いは実装ごとの確認事項であり、ここでは仕様から推定しません。

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 > optionnull候補自体ではなく、関連する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の影響も受ける
labellabel属性を反映する文字列。未指定時はoptionのlabel解決結果
defaultSelectedselected属性を反映するboolean
selected現在のselectednessを読み書きするboolean。設定時はdirtinessにも関係する
valueoptionの値。value属性がなければoption textから得られる
text空白を整理したoption text。設定すると子の内容を置き換える
index / formoption 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と根拠位置
種別Fact / 主張条件・範囲状態根拠
SPECoptionはselectの選択肢、またはdatalistの入力候補を表します。optionの定義と使用コンテキスト。確認済みHTML Standard: the option element
SPECoptionのラベルはlabel属性、なければoption textから解決され、値はvalue属性、なければ収集されたtextから解決されます。label / value属性の有無とtext収集アルゴリズム。確認済みHTML Standard: label and value
SPECselected属性はdefault selectednessを表し、現在のselectednessとは異なる状態です。ユーザー操作、IDL設定、リセット、single selectの選択モデル。確認済みHTML Standard: selectedness
SPECdisabledはoption自身、またはdisabledなoptgroupから解決されます。ユーザー操作による選択、DOMからの状態変更、optgroup境界。確認済みHTML Standard: disabled
SPECoptionはフォームコントロールのカテゴリではなく、option.formは最近接selectのform ownerを返します。select内、datalist内、form ownerの有無。確認済みHTML Standard: form IDL
SPECsingle-selectの有効なselectedcontentは、選択中optionの子ノードを複製し、label属性は複製しません。リッチな内容はoptionのcontent modelに制限されます。labelなしでselect内にあるoption、single-selectのselectedcontent更新、datalist内での別のtext-only model。確認済みHTML Standard: option content model · selectedcontent

Evidence

  1. HTML Standard: The option element — context、content model、属性、selectedness、label、value、DOM interface
  2. HTML Standard: The select element — option list、single / multipleの選択モデル、リセット、フォーム送信との関係
  3. HTML Standard: The datalist element — optionを入力候補として使う場合の関係
  4. HTML Standard: The selectedcontent element — 選択中optionの子ノード複製、更新規則、multiple selectとの境界
  5. HTML Accessibility API Mappings — option role、selected state、disabled stateのアクセシビリティAPI境界
  6. 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です。

option要素の実装Evidence登録表
種別再現確認の範囲記録する条件状態
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)
WPT リッチなoption内容、selectedcontentの子要素複製と更新、label属性との境界、datalistのcontent model境界 2026-09-25 / Chrome 153.0.8010.53 / Windows 11 Pro build 26200 / wpt.live。select-parsing.html、selectedcontent.html、selectedcontent-mutations.html、selectedcontent-nested.html、selectedcontent-insertion-removal.htmlの計36 subtestsで35 pass・1 fail。failはmultiple select内selectedcontentのparser mutation。label属性境界とdatalist専用WPTは未実行

実測時のテスト版は未記録です。リンク先の内容は変わることがあり、当時と同じテストで再確認できるとは限りません。

部分実測(35/36 pass、1 fail)
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)
AAM リッチなoption内のaccessible name、selected state、画像・テキスト子要素、選択変更後のselectedcontent Chrome 153.0.8010.53 / Windows 11 Pro / 2026-09-25。browser AXでcollapsed button value span one、expanded pickerのselected item span oneとrich option名 new span twoを観測。Windows UIAではpage ControlType.Documentを取得できず、Narrator/NVDAの読み上げは未測定 部分観測(Chrome browser AXのみ)

今回の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候補の展開状態、支援技術ごとの観測
  • 仕様確認済みリッチなoption内容、selectedcontentによる子ノード複製とlabel属性との違い、single-selectの条件、datalistのtext-only model
  • 未完了customizable option contentの個別WPT、リッチな選択肢のアクセシビリティ公開、ブラウザー別の挙動、歴史的変更と互換性

このページは初期Coverageです。確認済みの範囲を示すものであり、すべてのブラウザーで同じ表示・操作・アクセシビリティAPI結果になること、またはoption要素全体の検証が完了したことを主張しません。

Related surface

初心者向けの選択肢の作り方、表示名と送信値、selected / disabledの使い方はYugienのoption要素ページを参照してください。選択モデル全体はAtlasのselect要素、フォーム送信の共通処理はAtlasのform要素、ラベルとの関係はAtlasのlabel要素でも確認できます。