オプションのVALUEについて

[新着] Webテンプレートを仮オープンしました



0   名前: 世田谷 : 2006/04/14 16:05
リストボックスで選択したvalue値を取るのに、
this.options.valueで取れるのは何故なんでしょうか。
selectedイベントを取らなくてもどうしてできるのか
わかりません。教えてください。よろしくお願いします。

1   名前: Pid : 2006/04/14 16:05
> this.options.valueで取れるのは何故なんでしょうか。

結論から言えば,(少なくとも私が確認した範囲内では)そのような書式はどこにも保証されていません。「ブラウザによってはたまたま取得できることもある」くらいに考えて,公的には使うべきでないと考えます。

以下は読み飛ばして結構です。


* * *

DOM1-HTML 仕様では

interface HTMLCollection {
  readonly attribute unsigned long  length;
  Node  item (in unsigned long index);
  Node  namedItem (in DOMString name);
};

interface HTMLSelectElement : HTMLElement {
  ...
  readonly attribute HTMLCollection options;
  ...
};

ですから,SELECT.options.value は存在しません。
http://www.w3.org/TR/REC-DOM-Level-1/level-one-html.html


* * *

DOM2-HTML には新たに HTMLOptionsCollection が追加され,

interface HTMLSelectElement : HTMLElement {
  ...
  readonly attribute HTMLOptionsCollection  options;
  ...
};

interface HTMLOptionsCollection {
  attribute unsigned long  length; // raises(DOMException) on setting
  Node  item (in unsigned long index);
  Node  namedItem (in DOMString name);
};

となりましたが,やはり SELECT.options.value は存在しません。

※なお,ECMAScript Language Binding により,SELECT.options.item (2) は SELECT.options[2] と書けることが保証されます。
http://www.w3.org/TR/DOM-Level-2-HTML/html.html


* * *

MSDN の option コレクションの項を見ても,やはり SELECT.options.value は存在しません。なお,

[ oObject = ] SELECT.options (vIndex [, iSubIndex])

とありますので,IE の場合は SELECT.options (1) のようにも書けます。
http://msdn.microsoft.com/workshop/author/dhtml/reference/collections/options.asp


* * *

ついでに Mozilla の IDL 定義を見ても,DOM2-HTML と同様ですので SELECT.options.value は存在しません。
http://lxr.mozilla.org/mozilla/source/dom/public/idl/html/nsIDOMHTMLOptionsCollection.idl


* * *

以上より,SELECT.options.value という書式の根拠はどこにも無いと考えます。


【追記】JavaScript 1.3 のリファレンスには SELECT.options.selectedIndex という例が載っていますので,もしかしたらこの辺りの拡大解釈による実装かもしれません。
http://devedge-temp.mozilla.org/library/manuals/2000/javascript/1.3/reference/select.html#1193366

一覧へ戻る