select 要素

4.10.9 select 要素

カテゴリー
フロー・コンテンツ
フレージング・コンテンツ
インタラクティブ・コンテンツ
リスト化要素で、ラベル付け可能で、サブミット可能リセット可能フォーム関連要素
この要素を使うことができるコンテキスト:
フレージング・コンテンツが期待される場所
コンテンツ・モデル:
0 個以上の option または optgroup 要素
コンテンツ属性:
グローバル属性
autofocus
disabled
form
multiple
name
required
size
DOMインタフェース:
interface HTMLSelectElement : HTMLElement {
           attribute boolean autofocus;
           attribute boolean disabled;
  readonly attribute HTMLFormElement form;
           attribute boolean multiple;
           attribute DOMString name;
           attribute boolean required;
           attribute unsigned long size;

  readonly attribute DOMString type;

  readonly attribute HTMLOptionsCollection options;
           attribute unsigned long length;
  getter any item(in unsigned long index);
  any namedItem(in DOMString name);
  void add(in HTMLElement element, in optional HTMLElement before);
  void add(in HTMLElement element, in long before);
  void remove(in long index);

  readonly attribute HTMLCollection selectedOptions;
           attribute long selectedIndex;
           attribute DOMString value;

  readonly attribute boolean willValidate;
  readonly attribute ValidityState validity;
  readonly attribute DOMString validationMessage;
  boolean checkValidity();
  void setCustomValidity(in DOMString error);

  readonly attribute NodeList labels;
};

select 要素は、選択肢のセットの中から選択させるためのコントロールを表します。

multiple 属性は論理属性です。この属性が存在すれば、その select 要素は、選択肢リストから 0 個以上の選択肢を選択できるコントロールを表します。この属性がなければ、その select 要素は、選択肢リストから1個だけの選択肢を選択できるコントロールを表します。

size 属性は、ユーザーに表示する選択肢の数を与えます。size 属性が指定されたら、その値は 0 より大きい妥当な非負整数でなければいけません。multiple 属性が存在すれば、size 属性のデフォルト値は 4 となります。multiple 属性がなければ、size 属性のデフォルト値は 1 となります。

select 要素の表示サイズとは、要素の size 属性に非負整数をパースする規則を適用した結果のことです。ただし、この要素がこの属性を持ち、そのパースが成功した場合に限ります。これらの規則をこの属性値に成功裏に適用できなかった場合、または、size 属性が存在しなかった場合、この要素の表示サイズは、この属性のデフォルト値となります。

select 要素の選択肢リストとは、その select 要素の子要素となるすべての option 要素、そして、その select 要素の子要素となるすべての optgroup 要素の子要素となるすべての option 要素から、ツリー順で構成されたものです。

required 属性は、論理属性です。指定されたら、ユーザーは、フォームをサブミットする前に、値を選択することを求められます。

もし、select 要素に required 属性が指定され、multiple 属性が指定されず、表示サイズ が 1 となる場合、該当の select 要素の選択肢リストoption 要素が存在し、その最初のが空文字列で、その option 要素の親ノードが該当の select 要素(optgroup 要素ではない)なら、その option が、該当の select 要素の プレースホルダー・ラベル・オプション になります。

もし、select 要素に required 属性が指定され、multiple 属性が指定されず、表示サイズ が 1 となる場合、該当の select 要素はプレースホルダー・ラベル・オプションを持たなければいけません。

制約バリデーション: もし、この要素に required 属性が指定され、その select 要素の選択肢リストに、選択状態が true にセットされた option 要素がひとつもない、または、その select 要素の選択肢リストに、選択状態が true にセットされた option 要素がプレースホルダー・ラベル・オプションしかない、のいずれかなら、この要素は未入力状態に陥っていることになります。

multiple 属性が指定されず、その要素が無効になっていなければ、ユーザーエージェントは、その選択肢リストから、無効になっていない option 要素を、ユーザーが選択できるようにするべきです。(クリックしたり、値の変更後に要素のフォーカスを外したり、メニュー・コマンドやその他のメカニズムを通して)選択されているこの option 要素上で、関連のユーザー・インタラクション・イベントがキューイングされる前に(例:click イベントの前)、ユーザーエージェントは、選択された option 要素の選択状態を true にセットしなければいけません。そして、タスク・ソースとしてユーザー・インタラクション・タスク・ソースを使って、select 要素で change という名前のバブリングするシンプルなイベントを発出するためのタスクをキューイングしなければいけません。

multiple 属性がなければ、その select 要素の選択肢リストにある option 要素の選択状態が true にセットされているときや、選択状態が true にセットされた option 要素が select 要素の選択肢リストに追加されるときは必ず、ユーザーエージェントは、選択肢リストの他のすべての option 要素の選択状態を false にセットしなければいけません。

multiple 属性がなく、その要素の表示サイズが 1 より大きければ、ユーザーエージェントは、選択状態が true の option 要素を選択から外すようユーザーがリクエストできるようにするべきです。このリクエストがユーザーエージェントに伝達される上で、関連のユーザー・インタラクション・イベントがキューイングされる前に(例:click イベントの前)、ユーザーエージェントは、その option 要素の選択状態を false にセットしてから、タスク・ソースとしてユーザー・インタラクション・タスク・ソースを使って、その select 要素で change という名前のバブリングするシンプルなイベントを発出するためのタスクをキューイングしなければいけません。

multiple 属性がなく、その要素の表示サイズが 1 なら、ユーザーエージェントは、その select 要素の選択肢リストにある option 要素のうち、選択状態が true にセットされたものがひとつもないときは常に、選択肢リストの中で無効でない option 要素があれば、その中からツリー順で最初の option 要素の選択状態を true にセットしなければいけません。

multiple 属性が指定され、その要素が無効でなければ、ユーザーエージェントは、ユーザーが、選択肢リストoption 要素のうち無効になっていない option 要素の選択状態切り替えることができるようにするべきです(クリックしたり、値の変更後に要素のフォーカスを外したり、メニュー・コマンドやその他のメカニズムを通して)。ユーザーによって 1 個以上の option 要素の選択状態が変更されたら、関連のユーザー・インタラクション・イベントがキューイングされる前に(例:関連の click イベントの前)、ユーザーエージェントは、タスク・ソースとしてユーザー・インタラクション・タスク・ソースを使い、select 要素で change という名前のバブリングするシンプルなイベントを発出するためのタスクをキューイングしなければいけません。

select 要素のリセット・アルゴリズムは、その要素の選択肢リストのすべての option 要素に対して、selected 属性を持っていれば、選択状態を true にセットし、そうでなければ false にセットすることになります。

form 属性は、明示的に select 要素をフォーム・オーナーと結びづけるために使われます。name 属性は、その要素の名前を表します。disabled 属性は、そのコントロールを非インタラクティブにして、値がサブミットされないようにするために使われます。autofocus 属性は、フォーカスを制御します。

select . type

要素に multiple 属性があれば "select-multiple" を返し、なければ "select-one" を返します。

select . options

選択肢リストHTMLOptionsCollection を返します。

select . length [ = value ]

選択肢リストにある要素の数を返します。

より小さい数字をセットすると、その select 要素の option 要素の数が切り詰められます。

より大きい数字をセットすると、その select 要素に空の新たな option 要素が追加されます。

element = select . item(index)
select[index]

選択肢リストから、index に指定されたインデックス位置にある項目を返します。項目はツリー順にソートされます。

index が範囲外であれば、null を返します。

element = select . namedItem(name)

選択肢リストから、ID または名前 name を持った項目を返します。

複数の項目が当てはまる場合は、該当の要素すべてを含んだ NodeList を返します。

指定の ID を持った要素が見つからなければ null を返します。

select . add(element [, before ])

before に指定されたノードの前に element を挿入します。

before 引数には数字を指定することができます。その場合、element はその数字を持った項目の前に挿入されます。before 引数が選択肢リストの要素の場合は、element はその要素の前に挿入されます。

before が省略、または、null 、または、範囲外の数字だった場合は、element はリストの最後に追加されるでしょう。

このメソッドは、element が挿入先の要素の祖先だったら、HIERARCHY_REQUEST_ERR 例外を投げるでしょう。elementoption 要素または optgroup 要素でなければ、このメソッドは何もしません。

select . selectedOptions

選択肢リストから選択済みの HTMLCollection を返します。

select . selectedIndex [ = value ]

選択された項目があれば、その最初の項目のインデックスを返します。なければ -1 を返します。

値をセットして、選択を変更することができます。

select . value [ = value ]

選択された項目があれば、その最初の項目のを返します。何も選択されていなければ、空文字列を返します。

値をセットして、選択を変更することができます。

type IDL 属性は、取得時においては、multiple 属性が存在しなければ文字列 "select-one" を返し、multiple 属性が存在すれば文字列 "select-multiple" を返さなければいけません。

options IDL 属性は、select ノードをルートとした HTMLOptionsCollection を返さなければいけません。そのフィルターは、選択肢リストの要素に一致します。

options コレクションは、HTMLSelectElement オブジェクトを正確に映し出したものとなります。インデックス付きプロパティのインデックスは常に、その時点で options 属性によって返されるオブジェクトによってサポートされたインデックスとなります。

length IDL 属性は、options コレクションによって表されるノードの数を返さなければいけません。セット時においては、options コレクション上の同じ名前の属性と同様に動作しなければいけません。

item(index) メソッドは、options コレクション上の同じ名前のメソッドに同じ引数を与えて呼び出したときに返される値を返さなければいけません。

namedItem(name) メソッドは、options コレクション上の同じ名前のメソッドに同じ引数を与えて呼び出したときに返される値を返さなければいけません。

同様に、add()remove() メソッドは、options コレクション上の同じ名前のメソッドと同様に動作しなければいけません。

selectedOptions IDL 属性は、select ノードをルートにした HTMLCollection を返さなければいけません。そのフィルターは、選択肢リストの中で選択状態が true にセットされている要素に一致します。

selectedIndex IDL 属性は、取得時においては、選択肢リストの中で選択状態が true にセットされている option 要素があれば、そのうち、ツリー順で最初の option 要素のインデックスを返さなければいけません。なければ、-1 を返さなければいけません。

セット時においては、selectedIndex 属性は、選択肢リストoption 要素すべての選択状態を false にセットしなければいけません。それから、選択肢リストの中に、指定された新しい値がインデックス位置となる option 要素があれば、その選択状態を true にセットしなければいけません。

value IDL 属性は、取得時においては、選択肢リストから、選択状態が true にセットされた option 要素があれば、そのうち、ツリー順で最初の option 要素の値を返さなければいけません。なければ、空文字列を返さなければいけません。

セット時においては、value 属性は、選択肢リストoption 要素すべての選択状態を false にセットしなければいけません。それから、選択肢リストoption 要素のうち、value 属性が指定の値と一致する option 要素があれば、そのうち、ツリー順で最初の option 要素の選択状態を true にセットしなければいけません。

multiple, required, size IDL 属性は、同じ名前の対応するコンテンツ属性を反映しなければいけません。 size IDL 属性は、非負数のみに限定されます。デフォルト値は 0 です(歴史的理由により、これが反映する size コンテンツ属性のデフォルト値とは違います)。

willValidate, validity, validationMessage 属性と、checkValidity()setCustomValidity() メソッドは、制約バリデーション API の一部です。labels 属性は、この要素の label 要素のリストを提供します。autofocus, disabled, form, name IDL 属性は、この要素の forms API の一部です。

次の例は、ユーザーが選択肢を一つだけ選択することができる選択肢のセットをユーザーに提供するために、どうやって select 要素を使うのかを示しています。デフォルトの選択肢が事前に選択された状態になっています。

<p>
 <label for="unittype">Select unit type:</label>
 <select id="unittype" name="unittype">
  <option value="1"> Miner </option>
  <option value="2"> Puffer </option>
  <option value="3" selected> Snipey </option>
  <option value="4"> Max </option>
  <option value="5"> Firebot </option>
 </select>
</p>

ここでは、いくらかの数字を選択できる選択肢のセットをユーザーに提供しています。デフォルトで、5 つの選択肢すべてが選択された状態になっています。

<p>
 <label for="allowedunits">Select unit types to enable on this map:</label>
 <select id="allowedunits" name="allowedunits" multiple>
  <option value="1" selected> Miner </option>
  <option value="2" selected> Puffer </option>
  <option value="3" selected> Snipey </option>
  <option value="4" selected> Max </option>
  <option value="5" selected> Firebot </option>
 </select>
</p>

※ 原文:http://www.w3.org/TR/2011/WD-html5-20110525/the-button-element.html#the-select-element