* フォーム制御子系要素 disable 属性 (HTML, XHTML 1)
[2] [[HTML]] のフォーム[[制御子]]系要素の [DFN[[CODE(HTMLa)[disabled]] 属性]]は、
その制御子の利用者入力を無効にします。
[14]
:状態:[[W3C]] [[勧告]]、[[WHATWG]] [[WD]]
:[[要素型]]:[CODE(HTMLe)[[[button]]]],
[CODE(HTMLe)[[[input]]]], [CODE(HTMLe)[[[optgroup]]]],
[CODE(HTMLe)[[[option]]]], [CODE(HTMLe)[[[select]]]],
[CODE(HTMLe)[[[textarea]]]],
[CODE(HTMLe)@en[[QN[[[fieldset]]] [http://www.w3.org/1999/xhtml]]]],
[CODE(HTMLe)@en[[QN[[[optgroup]]] [http://www.w3.org/1999/xhtml]]]],
[CODE(HTMLe)@en[[QN[[[option]]] [http://www.w3.org/1999/xhtml]]]]
:[[属性名]]:[CODE(HTMLa)@en[[[disabled]]]]
([Q@en[disalbed]] ([Q[無効]]) より)
:[[属性値]]:[[ブール型属性]] (>>4)
:[[既定値]]:[[偽]] (>>4)
[3] 仕様書:
- [[HTML 4]] ([[Web Forms 1.0]])
-- [CITE[17.12.1 Disabled controls]]
- [[Web Forms 2.0]]
-- [CSECTION@en[2.5. Extensions to existing attributes]]
--
[11]
HTML 4 DTD の[[注釈]] (参考) には
[Q[unavailable in this context]]
と説明があります。
** 属性値
[4] この属性は[[真偽値属性]]です。指定すれば真 (無効)、
指定しなければ偽 (有効) です。
[5] この属性は継承しますが、局所宣言が継承値を上書きします [SRC[HTML 4 17.12.1]]。
この規定が適用されるのは、メニュー選択制御子 ([CODE(HTMLe)[select]])
の場合と推定されます。
[15]
[CODE(HTMLe)@en[[[fieldset]]]] が [CODE(HTMLa)@en[[[disabled]]]]
されると、その[[子孫]]の[[フォーム制御子]]は、
すべて [CODE(HTMLa)@en[[[disabled]]]] となります。
[SRC@en[WF2 2.5]]
** UA による利用
[6]
無効化された制御子は、
- [[焦点]]を受取りません。 [SRC[HTML 4 17.12.1]]
- タブ navigation ([CODE(HTMLa)[[[tabindex]]]] 参照。) で飛ばされます。
[SRC[HTML 4 17.12.1]]
- [[成功]]できません。 [SRC[HTML 4 17.12.1]]
- [[レンダリング]]は UA 依存です。[SRC[HTML 4 17.12.1]]
-- 例: メニュー項目やボタンの名札を[Q[[[灰化]]]]する。 [SRC[HTML 4 17.12.1]]
[16]
[[利用者エージェント]]は、
- [CODE(HTMLa)@en[[[disabled]]]] [[属性]]が設定されている[[フォーム制御子]]と、
- [[祖先]]の [CODE(HTMLe)@en[[[fieldset]]]]
[[要素]]の [CODE(HTMLa)@en[[[disabled]]]] [[属性]]が設定されている[[フォーム制御子]]
を無効化[['''しなければなりません''']]。
[SRC@en[WF2 2.5]]
[17]
>>16 を厳密に解釈すると、
[[フォーム制御子]]でない [CODE(HTMLe)@en[[[option]]]]
と [CODE(HTMLe)@en[[[optgroup]]]] と
[CODE(HTMLe)@en[[[fieldset]]]] は無効化されず、
[[フォーム制御子]]である (が [CODE(HTMLa)@en[[[disabled]]]]
は持たない) [CODE(HTMLe)@en[[[output]]]]
は無効化されることになってしまいますが、
[CODE(HTMLe)@en[[[fieldset]]]] や
[CODE(HTMLe)@en[[[output]]]] に対して有効・無効ということはあまり意味がありませんし、
[CODE(HTMLe)@en[[[option]]]] や
[CODE(HTMLe)@en[[[optgroup]]]] は
[CODE(HTMLe)@en[[[select]]]] の[[子孫]]でない限り、
やはり有効・無効にあまり意味はないので、
特に問題はなさそうです。
** 実装
[12]
[CITE[CSS Attribute selector bug - My Opera Forums]]
[18] [CITE[IE7以下でもdisabled 属性を利用できるようになる「select-option-disabled-emulation.js」-JavaScript Library Archive]] ([TIME[2009-04-19 14:38:57 +09:00]] 版)
** 他との関係
[7] HTML 的には有効・無効を動的に切り替える方法がなく、
スクリプトを使うことになっています。 [SRC[HTML 4 17.12.1]]
[8] 似たような属性として [CODE(HTMLa)[[[readonly]]]]
があります。利用者の入力を受け付けないという意味では
[CODE(HTMLa)[disabled]] と同じですが、 [CODE(HTMLa)[readonly]]
な制御子は成功するなどの違いがあります。
** アクセス可能性・可用性・安全性
[10] この属性は、例えば、必須の項目が入力されるまで提出ボタンを無効にする、
といったような目的で使うことができます [SRC[HTML 4 17.12.1]]。
しかし、 HTML だけでは有効・無効状態を動的に切り替えることができませんから、
その機能はスクリプトによって実現する必要があります。
このような場合、初期状態では必須の項目が未入力の状態であるとすると、
提出ボタンの初期状態も[Q[無効]]となるべきです。
従って、 HTML 文書に直接 [SAMP(HTML)[]]
と指定しておきたくなります。しかし、
これは'''好ましくありません'''。なぜなら、
スクリプトが使えない UA やスクリプトを無効にしている利用者は、
この提出ボタンを押してフォームを提出しておくことができなくなってしまいます。
ですから、 HTML 文書の記述は
[PRE(HTML)[
]PRE]
にとどめておき、スクリプトによって最初にこのボタンを無効化するという方法を採るべきです。
** 例
[9] 無効な文章入力制御子の例 [SRC[HTML 4 17.12.1]]
[PRE(HTML)[
]PRE]
この例では、この制御子は通常レンダリングされますが、
利用者は編集できませんし、[[提出]]時に使われることもありません。
* [CODE(HTMLe)@en[[[style]]]] 要素 [CODE(HTMLa)@en[disabled]] 属性
** 歴史
[1] [[WinIE 4]] では [CODE(HTMLe)[[[style]]]] 要素で [CODE(HTMLa)[disabled]]
属性が使えました。うっかりだと [[M$]] の人は書いています:
''RE: The "title" attribute of "style" elements from Chris Wilson on 1999-11-04 ''
(www-html@w3.org from November 1999)'' ''
[21] [[XHTML 2.0]] で同名で同機能の[[属性]]が追加されています。
;;
[CITE@en[XHTML 2.0 - XHTML Style Sheet Module]] ([TIME[2006-07-27 05:04:34 +09:00]] 版)
* [CODE(CSS)@en[:disabled]] 擬似クラス (選択子)
[13]
[CITE[Bug 84400 - Support :disabled and :enabled pseudo-classes]]
([[名無しさん]] [WEAK[2005-08-31 02:15:00 +00:00]])
[[#comment]]
* メモ
[19] [CITE[IRC logs: freenode / #whatwg / 20090610]]
([TIME[2009-08-29 19:19:58 +09:00]] 版)
[20] [CITE@en-GB-x-Hixie[Web Forms 2.0]]
([TIME[2009-01-05 20:07:15 +09:00]] 版)