[24] [DFN[DOM [RUBYB[イベント]@en[Events]]]]は、 [[HTML文書]]や 
[CODE(DOMi)@en[[[XMLHttpRequest]]]] をはじめとする [[Webプラットフォーム]]の[[オブジェクト]]における[[事象モデル]]です。

* 仕様書

[REFS[
- [43] [CITE@en-US[DOM Standard]] ([TIME[2013-04-26 20:00:45 +09:00]] 版) <http://dom.spec.whatwg.org/#events>
]REFS]

* 概念

[56] 
[FIG(short list)[
- [44] [CODE(DOMi)@en[[[Event]]]]
- [45] [CODE(DOMi)@en[[[EventTarget]]]]
-- [CODE(DOMm)@en[addEventListener]]
-- [CODE(DOMm)@en[removeEventListener]]
- [46] [[イベントリスナー]]
- [[イベントハンドラー]] ([CODE[on[VAR[*]]]])
- [47] [[dispatch]]
-- [[イベント経路]]
-- [[イベント相]]
--- [[bubbling]]
--- [[capture]]
- [48] [RUBYB[[[発火]]]@en[fire]]
- [[イベント型]]
-- [[単純イベント]]
-- [[UIイベント]]
- [[trusted]]

[HISTORY[
- [[既定動作]]
- [[イベント群]]
- [[変異イベント]]
]HISTORY]
]FIG]

* 同期イベント

[60] 新たに [[DOM]] に追加されるほとんどの[[イベント]]は、
[[スクリプト]]とは別の[[タスク]]によって [[dispatch]] される
(つまり[[スクリプト]]から見て[[非同期]]に [[dispatch]] される)
形になっています。

[61] 一方で古くからある[[イベント]]は、[[同期的]]に [[dispatch]]
されることがあります。

[FIG(list middle)[ [62] [[同期的]]に [[dispatch]] される[[イベント]]
- [CODE[click]] [[メソッド]]
-- [CODE[click]] [[イベント]]
- [CODE[focus]] [[メソッド]]
- [[DOM変異]]
-- [[変異イベント]]

@@ 不完全
]FIG]

* 歴史

[41] [[DOMイベント]]は [[Netscape Navigator 2.0]] の最初の [[JavaScript]] の頃から存在し、
すべての[[利用者エージェント]]に実装されました ([CODE[[[on*]]]] [[属性]])。 [[IE4]] と [[Netscape4]] 
によって大幅に拡張・一般化されましたが、両者の実装は完全に異なっていました。更に
[[W3C]] はそれらを元にどちらとも異なる仕様を[[DOM2イベント]]として標準化しました。 
[[Netscape4]] はすぐに衰退しましたが、しばらくは [[W3C]] と [[IE]]
の2つのイベント・モデルが存在し混乱のもととなっていました。

[42] その後 [[W3C]] は[[DOM2イベント]]を拡張した 
[[DOM3イベント]]の標準化を進めましたが十分な支持を得られず、一旦は中止されることになります。
実用性に乏しい新機能を排除して現実的な仕様として再開されましたが作業は遅々として進まず、
[[DOM4]]、後の [[WHATWG]] [[DOM Standard]] によって改めて 
[[Webブラウザー]]の挙動に基づき仕様が全面改訂されるに至り、
[CODE[[[on*]]]] [[属性]]を規定する [[HTML Standard]] と合わせ、
はじめて[[DOMイベント]]の仕様が実装可能なレベルで詳細に文書化されることと相成りました。

** DOM 事象モデルに関わる仕様

[11] [CITE[HTML 4]] <IW:HTML4:"">

[[HTML 4]] は、[[内在事象]]属性として、 [[DOM 0]]
の事象モデルの中心的な部分を取り入れています。
ただし、詳細な事象モデルの規定はなく、
個々の事象がいつ発生するのか簡単に述べられているだけです。

[1] [DFN[DOM2 [RUBYB[イベント]@en[Events]]]]は、 [[W3C]] で最初に標準化された [[DOM]] [[イベント]]仕様です。
2000年11月に W3C 勧告になりました。
[[DOM 0]] とは異なり、事象の処理が (比較的) 正確に規定されていますが、
DOM 0 とは (矛盾はしないものの) 異なる仕様となっており、
結局 DOM 0 の事象関係は曖昧なままとなってしまいました。

[2] [CITE[DOM 水準 3・事象]] <IW:DOM3:"Events/">

DOM 水準 2 事象の次の水準です。十分な反応が得られなかったために [[Last Call]] WD
の後に2003年11月に WG Note になりました。この仕様自体は勧告に至らなかったとはいえ、
DOM 水準3・中核の勧告や [[SVG 1.2]] などから参照されています。
技術的には、 DOM 水準 2 に比べると、事象名が単なる[[名前]]から[[名前空間URI]]
と[[局所名]]の組に改められたり、 DOM 水準 2 で勧告前に省かれた文字(列)入力に関する事象が加えられたりしています。
仕様書の説明もより整理されたものとなっています。

[8] [CITE[XML 事象]] <http://www.w3.org/TR/xml-events>

[[XML事象]]は、[[事象聴取器]]を XML 文書中に記述する構文の規定です。
2003年10月に W3C 勧告になっています。
[CITE[DOM 水準2・事象]]に基づいて規定されていますが、
[CITE[DOM 水準3・事象]]勧告や [[SVG 1.2]] によれば DOM 水準3と使って良いようです。
機能的・意味的には DOM 水準 0 の各種の事象記述の構文の後継になっていますが、
互換性はまったくありません (お互いに矛盾はしません)。

[10] [CITE[SVG]] <IW:SVG1:"">, <http://www.w3.org/TR/SVG12/>

[[SVG]] は、 HTML 4 のように[[内在事象]]属性を規定しています。 HTML
とは異なり、 DOM との関係などについても明確に規定があります。
SVG 1.0 と SVG 1.1 は [CITE[DOM 水準2・事象]]と SMIL アニメーションに基づいています。
SVG 1.2 は [CITE[DOM 水準3・事象]], XML 事象, SMIL アニメーション,
[[sXBL]] に基づいています。

[12] [CITE[XBL - XML Binding Language]] <http://www.w3.org/TR/xbl/>,
[CITE[SVG's XML Binding Language (sXBL)]] <http://www.w3.org/TR/sXBL/>

[[XBL]], [[sXBL]] は[[影内容]]と事象の関係について規定しています。

[14]
[CITE[Web Applications 1.0]] <http://whatwg.org/specs/web-apps/current-work/#server-sent>
はネットワークを通じて DOM
事象を転送する方法を提案しています。
([[名無しさん]])

[17]
[CITE[Remote Events for XML (REX) 1.0]] <http://www.w3.org/TR/rex/>

>>14 と同じような目的のものだけど、例によって >>14
は単純で大体うまくいくもの、こちらは完璧に何でもできることを目指したものみたいです。

現時点の仕様案では >>14 は[[変異事象]]を必ずしもうまく扱えませんが、 >>14 は[[変異事象]]''しか''規定されていません。
([[名無しさん]] [WEAK[2006-02-09 02:43:39 +00:00]])

[63] [[CEA-2014-B]]

[[DOM2 Events]]

[64] 
[DFN[KS X 6047-3:2011]]
は
[[DOM2 Events]]
の
[[KS]]
版。

** 具体的な事象に関わる仕様

[3] [CITE[DOM 水準3・中核]] <IW:DOM3:"Core/">

DOM 木の操作による変異事象に関する規定が含まれています。
また、 DOM 事象モデルとは異なる、 [CODE(DOMi)[[[DOMError]]]] 
や [CODE(DOMi)[[[DOMUserDataHandler]]]] のような似たような処理の仕組みが規定されています。

[4] [CITE[DOM 水準3・読込みおよび保存]] <IW:DOM3:"LS/">

読込みや保存に関する事象についての規定が含まれています。

[7] [CITE[XForms 1.0]] <IW:XForms10:"">

[[XForms 1.0]] は、 [CITE[DOM 水準2・事象]]を基にした処理モデルを規定しています。

[9] [CITE[SMIL Animation]] <http://www.w3.org/TR/smil-animation>

[[SMIL Animation]] は [CITE[DOM 水準2・事象]]に基づいて構築されています。
([[SVG 1.2]] によれば水準3として使うことはできないようです。)

[13] [CITE[XUL]] <http://www.xulplanet.com/references/elemref/ref_EventHandlers.html>

[[XUL]] は内在事象属性や DOM 事象を定義しています。

[15]
[DASE] [CITE[DTV A S E L 1 (DASE-1) P 2: D A E ATSC Standard]] <http://www.atsc.org/standards/a_100_2.pdf>
は [CITE[[[DOM水準2]]・事象]]を基にして、
鍵盤関連の事象などを定義しています。

([[名無しさん]] [sage])

[16]
[CITE[EMMA: Extensible MultiModal Annotation markup language]] 
([[Last Call]])
<http://www.w3.org/TR/2005/WD-emma-20050916/#appD>

[[界面]] [CODE(DOMi)@en[[[EMMAEvent]]]] を定義しています。

([[名無しさん]])

[18]
[CITE[Media Access Events]] <http://www.w3.org/TR/2006/WD-MediaAccessEvents-20061013/>
([[名無しさん]] [WEAK[2006-10-13 23:23:33 +00:00]])


[21]
[CITE[List of events - ESW Wiki]] ([TIME[2007-04-28 13:20:22 +09:00]] 版) <http://esw.w3.org/topic/List_of_events>
([[名無しさん]] [WEAK[2007-04-28 04:23:16 +00:00]])


[[#comment]]


** その他

[5] [CITE[VoiceXML 2.0]] <http://www.w3.org/TR/voicexml20/>

[CITE[DOM 水準3・事象]]は使用例として VoiceXML 2.0 を挙げています。
しかし、実際には VoiceXML 2.0 勧告が規定しているものは (DOM 水準3・事象モデルとは矛盾していないものの)
異なる事象モデルです。

[6] [CITE[RDF/XML Syntax Specification]]
<http://www.w3.org/TR/rdf-syntax-grammar/>

[[RDF/XML]] は規定の方法として (あるいは RDF/XML 文書から RDF グラフを構築する手段として)
事象モデルを定義しています。この事象モデルは DOM のものではなく、 [[SAX]]
のものを基にしています。

* 関連

[49] [[DOMイベント]]と似ているものの [[DOMイベント]]を使わない、使わないようになったようなものとして、
次のものがあります。
[FIG(list)[
- [[コールバック]] - 一時期なら[[DOMイベント]]となっていたであろうものでも、敢えてその必要がなければ
[CODE(IDL)@en[[[callback]]]] で済ませるのが当世風です。
- [CODE(DOMi)@en[[[Future]]]] - ある時点で成功または失敗することになる類の操作結果はただの[[コールバック]]ではなく
[CODE(DOMi)@en[[[Future]]]] として提供されることになると思われます。
- [CODE(DOMi)@en[[[MutationObserver]]]] - [[mutation event]] はより簡素な専用の仕組みに置き換えられました。
]FIG]

[50] [[イベント・ループ]]とは直接関係ありません。

* メモ

[19]
[CITE@ja[作って納得! DOM 2 Events: Days on the Moon]] ([CODE[2007-03-25 14:31:59 +09:00]] 版) <http://nanto.asablo.jp/blog/2007/03/23/1339498>
([[名無しさん]] [WEAK[2007-03-25 05:38:02 +00:00]])

[20]
[CITE@ja[DOM Events とブラウザの実装: Days on the Moon]] ([CODE[2007-03-25 14:37:03 +09:00]] 版) <http://nanto.asablo.jp/blog/2007/03/23/1339502>
([[名無しさん]] [WEAK[2007-03-25 05:42:38 +00:00]])

[22] [CITE@en[Touch and gestures events]]
([[Olli Pettay]] 著, [TIME[2009-06-18 05:22:27 +09:00]] 版)
<http://lists.w3.org/Archives/Public/www-dom/2009AprJun/0134.html>

[23] [CITE[IRC logs: freenode / #whatwg / 20100625]]
([TIME[2010-06-29 00:39:18 +09:00]] 版)
<http://krijnhoetmer.nl/irc-logs/whatwg/20100625>

[25] [CITE[IRC logs: freenode / #whatwg / 20110212]]
( ([TIME[2011-03-22 22:45:03 +09:00]] 版))
<http://krijnhoetmer.nl/irc-logs/whatwg/20110212>

[26] [CITE[IRC logs: freenode / #whatwg / 20110213]]
( ([TIME[2011-03-22 23:37:34 +09:00]] 版))
<http://krijnhoetmer.nl/irc-logs/whatwg/20110213>

[27] [CITE[IRC logs: freenode / #whatwg / 20110215]]
( ([TIME[2011-03-23 00:32:10 +09:00]] 版))
<http://krijnhoetmer.nl/irc-logs/whatwg/20110215#l-644>

[28] [CITE[IRC logs: freenode / #whatwg / 20110221]]
( ([TIME[2011-03-26 23:34:18 +09:00]] 版))
<http://krijnhoetmer.nl/irc-logs/whatwg/20110221>

[29] [CITE[IRC logs: freenode / #whatwg / 20110223]]
( ([TIME[2011-03-27 01:13:07 +09:00]] 版))
<http://krijnhoetmer.nl/irc-logs/whatwg/20110223>

[30] [CITE[IRC logs: freenode / #whatwg / 20110301]]
( ([TIME[2011-03-27 15:00:02 +09:00]] 版))
<http://krijnhoetmer.nl/irc-logs/whatwg/20110301>

[31] [CITE[IRC logs: freenode / #whatwg / 20110303]]
( ([TIME[2011-03-28 22:14:52 +09:00]] 版))
<http://krijnhoetmer.nl/irc-logs/whatwg/20110303>

[32] [CITE[IRC logs: freenode / #whatwg / 20110607]]
( ([TIME[2011-06-10 08:38:27 +09:00]] 版))
<http://krijnhoetmer.nl/irc-logs/whatwg/20110607#l-492>

[33] [CITE[IRC logs: freenode / #whatwg / 20110802]]
( ([TIME[2011-08-13 13:39:31 +09:00]] 版))
<http://krijnhoetmer.nl/irc-logs/whatwg/20110802>

[34] [CITE@en[Web Applications 1.0 r6551     Update Event interfaces to use constructors instead of init*Event methods; remove some typedefs.]]
( ([TIME[2011-09-10 10:24:00 +09:00]] 版))
<http://html5.org/tools/web-apps-tracker?from=6550&to=6551>

[35] [CITE@en[Compound Document by Reference Framework 1.0]]
( ([TIME[2010-08-17 16:50:04 +09:00]] 版))
<http://www.w3.org/TR/CDR/#events>

[36] [CITE[IRC logs: freenode / #whatwg / 20130105]]
( ([TIME[2013-01-12 11:07:45 +09:00]] 版))
<http://krijnhoetmer.nl/irc-logs/whatwg/20130105>

[37] [CITE@EN[Delivery Context: Client Interfaces (DCCI) 1.0]]
( ([TIME[2007-12-11 04:28:19 +09:00]] 版))
<http://www.w3.org/TR/2007/CR-DPF-20071221/#sec-events>

[38] [CITE@en-US[XBL 2.0]]
( ([TIME[2012-05-03 02:23:03 +09:00]] 版))
<http://dev.w3.org/2006/xbl2/Overview.html#event-handlers>

[39] [CITE[IRC logs: freenode / #whatwg / 20130220]]
( ([TIME[2013-02-22 17:28:11 +09:00]] 版))
<http://krijnhoetmer.nl/irc-logs/whatwg/20130220>

[40] [CITE@en-US[DOM4 Events]]
( ([TIME[2013-01-07 19:05:28 +09:00]] 版))
<http://html5labs.interoperabilitybridges.com/dom4events/>

[51] [CITE[IRC logs: freenode / #whatwg / 20130305]]
( ([TIME[2013-05-22 15:23:22 +09:00]] 版))
<http://krijnhoetmer.nl/irc-logs/whatwg/20130305>

[52] [CITE@en-US[Accessible Rich Internet Applications (WAI-ARIA) 1.0]]
( ([TIME[2014-01-14 16:21:51 +09:00]] 版))
<http://www.w3.org/WAI/PF/aria/complete#def_event>

[53] [CITE@en-US[DOM Event I/O Processor for SCXML]]
( ([TIME[2015-08-06 00:51:18 +09:00]] 版))
<http://www.w3.org/TR/2015/NOTE-dom-iop-20150806/>

[FIG(quote)[
[FIGCAPTION[
[54] [CITE@en-US[DOM Event I/O Processor for SCXML]]
( ([TIME[2015-08-11 03:33:48 +09:00]] 版))
<http://www.w3.org/TR/2015/NOTE-scxml-dom-iop-20150811/>
]FIGCAPTION]

> This Note was once published on 6 August 2015 as a First Public Working Group Note. However, after the publication we got comments that the Note's having a shortname of "dom-iop" was misleading since the Note does not belog to the core set of the DOM specifications but describes the DOM I/O processor for SCXML. Therefore this Note is now republished with a clearer shortname of "scxml-dom-iop" to avoid confusion.

]FIG]


[55] [CITE@en[28455 – Add a method to add a one-time event listener]]
([TIME[2016-03-15 12:05:30 +09:00]] 版)
<https://www.w3.org/Bugs/Public/show_bug.cgi?id=28455>

[FIG(quote)[ [57] <http://www.w3.org/TR/xml-events#s_intro>

> An [DFN[event]] is the representation of some asynchronous occurrence (such as a mouse click on the presentation of the element, or an arithmetical error in the value of an attribute of the element, or any of unthinkably many other possibilities) that gets associated with an element (targeted at it) in an XML document.

> [DFN[事象]]とは、 [[XML文書]]中の[[要素]]と関連付けられる
(対象付けされる) 何らかの非同期な出来事
(要素の[[表現]]上での[[マウス]]の[[かちっ]]、
要素の属性中の値の算術的[[誤り]]、
その他考えられない他の可能性など)
の表現です。
]FIG]

[58] [CITE[IRC logs: freenode / #whatwg / 20121204]]
( ([TIME[2012-12-14 22:04:57 +09:00]] 版))
<http://krijnhoetmer.nl/irc-logs/whatwg/20121204>

[59] [CITE[trunk/Source/WebCore/dom の EventNames.in – WebKit]]
([TIME[2013-03-02 00:07:32 +09:00]] 版)
<http://trac.webkit.org/browser/trunk/Source/WebCore/dom/EventNames.in>