* 仕様書

[REFS[
- [84] [CITE@en-GB-x-hixie[HTML Standard]] ([TIME[2014-09-08 22:53:16 +09:00]] 版) <http://www.whatwg.org/specs/web-apps/current-work/#concept-fieldset-disabled>
- [70] [CITE@en-US-x-hixie[HTML Standard]] ([TIME[2013-12-19 00:10:55 +09:00]] 版) <http://www.whatwg.org/specs/web-apps/current-work/#concept-element-disabled>
]REFS]

* フォーム制御子系要素 [CODE(HTMLa)@en[disable]] 属性

[2] [[HTML]] のフォーム[[制御子]]系要素の [DFN[[CODE(HTMLa)[disabled]] 属性]]は、
その制御子の利用者入力を無効にします。

[14]
:[[要素型]]:[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]]
<IW:HTML4:"interact/forms.html#disabled">
- [[Web Forms 2.0]]
-- [CSECTION@en[2.5. Extensions to existing attributes]]
<IW:WF2:"#extensions0">
--<http://www.whatwg.org/specs/web-forms/current-work/#relation>

[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]] <http://my.opera.com/forums/showthread.php?threadid=96113>

[18] [CITE[IE7以下でもdisabled 属性を利用できるようになる「select-option-disabled-emulation.js」-JavaScript Library Archive]] ([TIME[2009-04-19 14:38:57 +09:00]] 版) <http://javascript.webcreativepark.net/library/select-option-disabled-emulation>

** 他との関係

[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)[<input type="submit" disabled>]]
と指定しておきたくなります。しかし、
これは'''好ましくありません'''。なぜなら、
スクリプトが使えない UA やスクリプトを無効にしている利用者は、
この提出ボタンを押してフォームを提出しておくことができなくなってしまいます。

ですから、 HTML 文書の記述は
[PRE(HTML)[
<input type="submit">
]PRE]

にとどめておき、スクリプトによって最初にこのボタンを無効化するという方法を採るべきです。

** 例

[9] 無効な文章入力制御子の例 [SRC[HTML 4 17.12.1]]
[PRE(HTML)[
<INPUT disabled name="fred" value="stone">
]PRE]

この例では、この制御子は通常レンダリングされますが、
利用者は編集できませんし、[[提出]]時に使われることもありません。

* 無効 fieldset

[21] [CODE(HTMLe)@en[[[fieldset]]]] [[要素]]は、次の時[RUBYB[[[無効fieldset]]]@en[disabled fieldset]]です [SRC[>>84]]。
[FIG(list)[
- [82] [CODE(HTMLa)@en[[[disabled]]]] [[属性]]を持つもの
- [83] [CODE(HTMLa)@en[[[disabled]]]] [[属性]]を持つ [CODE(HTMLe)@en[[[fieldset]]]] [[要素]]の[[子孫]]であるもので、そちらの [CODE(HTMLe)@en[[[fieldset]]]]
[[要素]]の最初の [CODE(HTMLe)@en[[[legend]]]] [[要素]]たる[[子供]]の[[子孫]]ではないもの
]FIG]

* 実際に無効

** 定義

[71] [[要素]]が[DFN[[RUBYB[[[実際に無効]]]@en[actually disabled]]]]であるとは、次の状態をいいます [SRC[>>70]]。
[FIG(list)[
- [54] [CODE(HTMLe)@en[[[button]]]] [[要素]]で[[無効]]なもの
- [55] [CODE(HTMLe)@en[[[input]]]] [[要素]]で[[無効]]なもの
- [56] [CODE(HTMLe)@en[[[select]]]] [[要素]]で[[無効]]なもの
- [57] [CODE(HTMLe)@en[[[textarea]]]] [[要素]]で[[無効]]なもの
- [58] [CODE(HTMLe)@en[[[optgroup]]]] [[要素]]で [CODE(HTMLa)@en[[[disabled]]]] [[属性]]を持つもの
- [59] [CODE(HTMLe)@en[[[option]]]] [[要素]]で[[無効]]なもの
- [60] [DEL[[CODE(HTMLe)@en[[[command]]]] [[要素]]で [CODE(HTMLa)@en[[[disabled]]]] [[属性]]を持つもの]]
-- >>72 で削除
- [61] [DEL[[CODE(HTMLe)@en[[[li]]]] [[要素]]で [CODE(HTMLe)@en[[[menu]]]] [[要素]]の[[子供]]であって、[[命令]]を定義する[[子要素]]を持っており、かつそのような最初の[[要素]]の[[無効状態]][[ファセット]]が[[真]] ([[無効]]) であるもの]]
-- >>72 で削除
- [74] [DEL[[CODE(HTMLe)@en[[[menuitem]]]] [[要素]]で [CODE(HTMLa)@en[[[disabled]]]] [[属性]]を持つもの]]
-- >>72 で追加
- [62] [CODE(HTMLe)@en[[[fieldset]]]] [[要素]]で[[無効fieldset]]であるもの
]FIG]

;; [68] [CODE(HTML)@en[[[<input type=hidden>]]]] には適用されないこととされていましたが、実装に合わせて >>67
で適用されるように変更されました。

** 用法

[75] この概念は [CODE(CSS)@en[:disabled]]/[CODE(CSS)@en[:enabled]] 
[[擬似クラス]] (>>53) の定義と[[フォーカス可能性]]の定義で使われています。

* [CODE(CSS)@en[:disabled]] 擬似クラス、[CODE(CSS)@en[:enabled]] 擬似クラス

[25] [DFN[[CODE(CSS)@en[[[:enabled]]]]]] [[擬似クラス]]、[DFN[[CODE(CSS)@en[[[:disabled]]]]]]
[[擬似クラス]]は、[[利用者界面要素]]が有効である、または無効であることをそれぞれ表します [SRC[>>24]]。

** 仕様書

[REFS[
- [24] [CITE@en[Selectors Level 3]] ([TIME[2011-09-29 22:16:17 +09:00]] 版) <http://www.w3.org/TR/selectors/#enableddisabled>
- [39] [CITE@en-US-x-hixie[HTML Standard]] ([TIME[2011-11-12 00:22:26 +09:00]] 版) <http://www.whatwg.org/specs/web-apps/current-work/#pseudo-classes>
]REFS]

** 意味

[26] どの[[要素]]が[[利用者界面要素]]であるか、また有効であるか無効であるか、は[[文書言語]]によって定義されます
[SRC[>>24]]。

[27] [[CSS]] 的に[[利用者]]が操作可能であるか否かは有効・無効に直接影響しません。例えば
[CODE(CSS)@en['[[display]]']] や [CODE(CSS)@en['[[visibility]]']] によって[[レンダリング]]の有無を指定し、
ひいては[[利用者]]が操作できなくすることができるかもしれませんが、それによって
[CODE(CSS)@en[[[:enabled]]]] と [CODE(CSS)@en[[[:disabled]]]] の状態が変化するわけではありません。
[SRC[>>24]]

*** HTML

[88] [CODE(CSS)@en[:enabled]] [[擬似クラス]]は、次の[[要素]]のうち、
[[実際に無効]]でないものに[[一致]]します [SRC[>>39]]。
[FIG(list short)[
- [CODE(HTMLa)@en[button]]
- [CODE(HTMLa)@en[input]]
- [CODE(HTMLa)@en[select]]
- [CODE(HTMLa)@en[textarea]]
- [CODE(HTMLa)@en[optgroup]]
- [CODE(HTMLa)@en[option]]
- [CODE(HTMLa)@en[menuitem]]
- [CODE(HTMLa)@en[fieldset]]
]FIG]

[HISTORY[
[40] [CODE(CSS)@en[[[:enabled]]]] [[擬似クラス]]は次の[[要素]]と[[一致]]します [SRC[>>39]]。
[FIG(list)[
- [41] [DEL[[CODE(HTMLe)@en[[[a]]]] [[要素]]で [CODE(HTMLa)@en[[[href]]]] [[属性]]を持つもの]]
-- >>85 で[[コメント化]]
- [42] [DEL[[CODE(HTMLe)@en[[[area]]]] [[要素]]で [CODE(HTMLa)@en[[[href]]]] [[属性]]を持つもの]]
-- >>85 で[[コメント化]]
- [43] [DEL[[CODE(HTMLe)@en[[[link]]]] [[要素]]で [CODE(HTMLa)@en[[[href]]]] [[属性]]を持つもの]]
-- >>85 で[[コメント化]]
- [44] [CODE(HTMLe)@en[[[button]]]] [[要素]]で[[無効]]でないもの
- [45] [CODE(HTMLe)@en[[[input]]]] [[要素]]で[[無効]]でないもの
- [46] [CODE(HTMLe)@en[[[select]]]] [[要素]]で[[無効]]でないもの
- [47] [CODE(HTMLe)@en[[[textarea]]]] [[要素]]で[[無効]]でないもの
- [48] [CODE(HTMLe)@en[[[optgroup]]]] [[要素]]で [CODE(HTMLa)@en[[[disabled]]]] [[属性]]を持たないもの
- [49] [CODE(HTMLe)@en[[[option]]]] [[要素]]で[[無効]]でないもの
- [50] [DEL[[CODE(HTMLe)@en[[[command]]]] [[要素]]で [CODE(HTMLa)@en[[[disabled]]]] [[属性]]を持たないもの]]
-- >>72 で削除
- [51] [DEL[[CODE(HTMLe)@en[[[li]]]] [[要素]]で [CODE(HTMLe)@en[[[menu]]]] [[要素]]の[[子供]]であって、[[命令]]を定義する[[子要素]]を持っており、かつそのような最初の[[要素]]の[[無効状態]][[ファセット]]が[[偽]] ([[無効]]でない) であるもの]]
-- >>72 で削除
- [73] [CODE(HTMLe)@en[[[menuitem]]]] [[要素]]で [CODE(HTMLa)@en[[[disabled]]]] [[属性]]を持たないもの
-- >>72 で追加
- [52] [CODE(HTMLe)@en[[[fieldset]]]] [[要素]]で[[無効fieldset]]であるもの
]FIG]
]HISTORY]

[53] [CODE(CSS)@en[[[:disabled]]]] [[擬似クラス]]は[[実際に無効]]である[[要素]] (>>71) と[[一致]]します [SRC[>>39]]。

*** XForms

[REFS[
- [28] [CITE@EN[XForms 1.1]] ([TIME[2010-08-13 07:45:33 +09:00]] 版) <http://www.w3.org/TR/xforms/#N90079>
]REFS]

[29] [[XForms]] では、 [CODE(CSS)@en[[[:enabled]]]] と [CODE(CSS)@en[[[:disabled]]]]
はそれぞれ[[フォーム制御子]]が[RUBYB[[[関係ある]]]@en[relevant]]または[RUBYB[[[無関係]]]@en[non-relevant]]であることを表します。

** 歴史

*** 選択子3

[REFS[
- [30] [CITE[User Interface Enhancements]] ([TIME[1999-09-16 05:07:02 +09:00]] 版) <http://www.w3.org/TR/1999/WD-css3-userint-19990916#pseudo-enabled>
- [31] [CITE@en[User Interface for CSS3]] ([TIME[2000-06-23 03:09:21 +09:00]] 版) <http://www.w3.org/TR/2000/WD-css3-userint-20000216#pseudo-enabled>
]REFS]

[32] はじめこれらの [[WD]] で定義されていましたが、その後[[選択子3]]に移されたようです。

[REFS[
- [37] [CITE@en[CSS3 module: W3C Selectors]] ([TIME[2000-04-11 01:57:05 +09:00]] 版) <http://www.w3.org/TR/2000/WD-css3-selectors-20000410#enableddisabled>
]REFS]

[66] その後の [[CSS3 UI]] は単に[[選択子3]]へのリンクになっています。

[REFS[
- [65] [CITE@en[CSS Basic User Interface Module Level 3 (CSS3 UI)]] ([[Tantek Çelik]] 著, [TIME[2012-01-13 20:03:30 +09:00]] 版) <http://www.w3.org/TR/2012/WD-css3-ui-20120117/#pseudo-classes>
]REFS]

*** XForms

[REFS[
- [33] [CITE[XForms and Styling]] ([TIME[2002-08-21 23:00:56 +09:00]] 版) <http://www.w3.org/TR/2002/WD-xforms-20020821/sliceF.html#id2641029>
]REFS]

[34] [[XForms]] における定義は >>33 で追加されました。

*** Web Controls 1.0

[38] [[Webアプリケーション]]が状態を制御できるように拡張する構想もありました。

[REFS[
- [36] [CITE@en-GB-hixie[Web Applications Markup Language 1.0]]
( ([TIME[2004-04-08 02:39:12 +09:00]] 版))
<http://hixie.ch/specs/html/apps/web-apps-1#pseudo-classes>
- [35] [CITE@en-GB-hixie[Web Controls 1.0]]
( ([TIME[2004-11-09 08:49:52 +09:00]] 版))
<http://www.whatwg.org/specs/web-controls/current-work/#pseudo-classes>
]REFS]

*** HTML

[64] [[HTML]] に関してははじめ [[Web Forms 2.0]] が、後に [[HTML Living Standard]] ([[Web Applications 1.0]])
が規定するようになりました。

[REFS[
- [19] [CITE[IRC logs: freenode / #whatwg / 20090610]]
([TIME[2009-08-29 19:19:58 +09:00]] 版)
<http://krijnhoetmer.nl/irc-logs/whatwg/20090610#l-124>
- [20] [CITE@en-GB-x-Hixie[Web Forms 2.0]]
([TIME[2009-01-05 20:07:15 +09:00]] 版)
<http://www.whatwg.org/specs/web-forms/current-work/#disabled1>
- [22] [CITE@en[Web Applications 1.0 r5398     Make :disabled accurately reflect <option> disabled state.Fixing http://www.w3.org/Bugs/Public/show_bug.cgi?id=10105]]
( ([TIME[2010-08-31 03:07:00 +09:00]] 版))
<http://html5.org/tools/web-apps-tracker?from=5397&to=5398>
- [23] [CITE[IRC logs: freenode / #whatwg / 20110118]]
( ([TIME[2011-02-12 21:17:44 +09:00]] 版))
<http://krijnhoetmer.nl/irc-logs/whatwg/20110118#l-1039>
- [63] [CITE@en-US-x-hixie[HTML Standard]] ([TIME[2011-11-12 00:22:26 +09:00]] 版) <http://www.whatwg.org/specs/web-apps/current-work/#pseudo-classes>
- [67] [CITE@en[Web Applications 1.0 r7300     It doesn't make any sense, but browsers make :enabled/:disabled apply to <input type=hidden>, so, oh well.]]
( ([TIME[2012-08-31 02:58:00 +09:00]] 版))
<http://html5.org/tools/web-apps-tracker?from=7299&to=7300>
- [72] [CITE@en[Web Applications 1.0 r7602       Grand <menu> revamp. Note: This patch includes parser changes.]] ([TIME[2012-12-29 10:23:00 +09:00]] 版) <http://html5.org/tools/web-apps-tracker?from=7601&to=7602>
]REFS]

** 実装

[13]
[CITE[Bug 84400 - Support :disabled and :enabled pseudo-classes]] <https://bugzilla.mozilla.org/show_bug.cgi?id=84400>
([[名無しさん]] [WEAK[2005-08-31 02:15:00 +00:00]])

* メモ


[69] [CITE@en[Web Applications 1.0 r7498     Another attempt at defining tabindex, :disabled, what can be focused, etc.]]
( ([TIME[2012-11-02 08:07:00 +09:00]] 版))
<http://html5.org/tools/web-apps-tracker?from=7497&to=7498>

[76] [CITE@en[Web Applications 1.0 r8390     Update how the interaction with CSS style sheets and CSSOM is defined.]]
( ([TIME[2014-01-14 07:45:00 +09:00]] 版))
<http://html5.org/tools/web-apps-tracker?from=8389&to=8390>

[77] [CITE@en[Bug 26622 – :enabled shouldn't match links, since they have no disabled state]]
( ([TIME[2014-09-04 12:29:15 +09:00]] 版))
<https://www.w3.org/Bugs/Public/show_bug.cgi?id=26622>

[78] [CITE[IRC logs: freenode / #whatwg / 20140903]]
( ([TIME[2014-09-04 12:29:18 +09:00]] 版))
<http://krijnhoetmer.nl/irc-logs/whatwg/20140903#l-733>

[79] [CITE@en[Web Applications 1.0 r2778 Defined how pseudo-classes match HTML concepts. Redid how rtl/ltr changes are marked. Stopped <legend> centering for <figure>. Removed <multicol> support. Removed <basefont> support. Removed obsolete notes. Fixed minor typos.]]
( ([TIME[2009-02-11 16:36:00 +09:00]] 版))
<http://html5.org/r/2778>

[80] [CITE[IRC logs: freenode / #whatwg / 20140903]]
( ([TIME[2014-09-04 12:35:25 +09:00]] 版))
<http://krijnhoetmer.nl/irc-logs/whatwg/20140903#l-733>

[81] [CITE@en[Web Applications 1.0 r8746 Try to clarify 'form control is disabled'.]]
( ([TIME[2014-09-05 07:22:00 +09:00]] 版))
<http://html5.org/r/8746>

[1] [CITE@en[Web Applications 1.0 r8753     Make sure :disabled matches fieldsets inside disabled fieldsets, since apparently that's a thing. Also, editorial cleanup around 'disabled'.]] ([TIME[2014-09-06 08:01:00 +09:00]] 版) <http://html5.org/r/8753>

[85] [CITE@en[Web Applications 1.0 r8818     Make :enabled not match <a href>]] ([TIME[2014-09-25 07:29:00 +09:00]] 版) <https://html5.org/r/8818>


[86] [CITE@en[28673 – Anchors should be disable-able]]
([TIME[2016-03-18 13:51:22 +09:00]] 版)
<https://www.w3.org/Bugs/Public/show_bug.cgi?id=28673>

[87] [CITE@en[Define :enabled by reference to "actually disabled"]]
([[gibson042]]著, [TIME[2016-08-18 00:15:33 +09:00]])
<https://github.com/whatwg/html/commit/881985545c6c5edc8a19a72a8249dcbe5e7c5d61>

[89] [CITE@en[Editorial: "actually disabled" is also used for :enabled now]]
([[annevk]]著, [TIME[2016-08-18 22:55:03 +09:00]])
<https://github.com/whatwg/html/commit/ac87672aa0c840ac5ff810c5ed39c5523923d17a>

[90] [CITE@en[Non-normative note about disabled controls disallows selection · Issue #1852 · whatwg/html]]
([TIME[2016-10-06 12:10:37 +09:00]])
<https://github.com/whatwg/html/issues/1852>

[91] [CITE@en[Clarify the difference between disabled and readonly]]
([[domenic]]著, [TIME[2016-10-13 02:22:52 +09:00]])
<https://github.com/whatwg/html/commit/5918513a6662afc3e94073498a1755a39bb98e9b>

[92] [CITE@en[Clarify and add some examples around focus]]
([[domenic]]著, [TIME[2016-11-03 04:45:57 +09:00]])
<https://github.com/whatwg/html/commit/deb83668390151a2cf242c24dd9d68509860e77a>

[93] [CITE@en[Remove the context menu feature]]
([[domenic]]著, [TIME[2017-06-09 03:16:29 +09:00]])
<https://github.com/whatwg/html/commit/e7e8c88ecdd7cdc96171f05ab6fe23b56dd48d8a>

[94] [CITE@en[Clarify disabled for option/optgroup is defined separately]]
([[annevk]]著, [TIME[2018-01-29 03:15:17 +09:00]])
<https://github.com/whatwg/html/commit/8d60f070d6ba6b5c7dfbc116fd9d3faee5d9c96e>

[95] [CITE@en[Clarify disabled for option/optgroup is defined separately by annevk · Pull Request #3415 · whatwg/html]]
([TIME[2018-01-29 12:53:40 +09:00]])
<https://github.com/whatwg/html/pull/3415>

[96] [CITE@en[Editorial: attribute domintro/index tweaks]]
([[domenic]]著, [TIME[2019-10-19 09:27:08 +09:00]])
<https://github.com/whatwg/html/commit/39098184f795a75887239af5a34d812f2994dd95>