DOM Level 2 Event Model は二つの目標を持って設計される。第一の目標は、ツリー構造を通したイベントフローを記述し、そして各イベントの為の基本的な文脈情報を供給するイベントハンドラの登録をを許可する一般的なイベントシステムの設計である。加えて仕様は、ユーザーインターフェイスコントロール及びそれらイベントモジュールそれぞれの為に定義された文脈情報を含めた文書修正通知の為のイベントの標準的モジュールを供給する。
イベントモデルの第2の目標は、DOM Level 0 ブラウザで使用されている現在のイベントシステム共通サブセットを供給である。これは存在するスクリプトとコンテントの内部操作性の促進を意図している。この目標は完全な後方互換性の充足は期待されない。しかしながら、この仕様は可能な限りその達成をを試みる。
イベントモデル仕様の以下の章では、 DOM イベントモデル仕様と、 モデル内で使用する為に設計された多くの適合イベントモジュールの両方を定義する。 イベントモデルはイベント伝達とイベントリスナー登録と Event インターフェイスの 2 章からなる。
DOM アプリケーションは、その実装による Event モジュールサポートの判定に、パラメータ値 "Events" と "2.0" (それぞれ)を持つ DOMImplementation
インターフェイスの hasFeature(feature, version)
メソッドを使用してよい。このモジュールの完全なサポートの為に、実装は DOM Level 2 Core 仕様 [DOM Level 2 Core] で定義された "Core" フィーチャーをサポートしなければならない。適合 についての詳細は DOM Level 2 Core 仕様 [DOM Level 2 Core] を参照のこと。
各イベントモジュールは、イベントモジュールリスト中において自分自身のフィーチャー文字列を記述する。
イベントフローは、イベントが DOM 実装から発生し、文書オブジェクトモデルへと渡される処理である。様々なイベントリスナー登録技法に沿ったイベントキャプチャ及びイベントバブリングのメソッドは、多くの方法でイベント操作を許可する。それは、局所的には EventTarget
レベルで、また中心的には文書ツリー内でより高位の EventTarget
から操作されるうる。
各イベントは、DOM 実装によってそのイベントが向けられる EventTarget
を持つ。この EventTarget
は Event
の target
アトリビュートで特定される。イベントがターゲットに達する際、その EventTarget
上に登録されたイベントリスナーが発動する。EventTarget
によって受け取られるすべてのイベントによって EventTarget
上のすべての EventListener
が発動されることを保証されるが、それらが他の EventTarget
上の EventListener
を考慮したイベントを受け取る順序に関する仕様は作られていない。イベントキャプチャもイベントバブリングも特にそのイベントに使用されない場合、リスナーがすべて発動した後にイベントフロー処理は完了する。イベントキャプチャまたはイベントバブリングが使用される場合、下のセクションに記述されるように、イベントフローが修正される。
EventListener
の内部で投げられたいかなる例外も、イベントの伝播を停止しない。それは記述された方法で任意の付加的な EventListener
の処理を継続する。
EventListener
によって講じられた処置が、追加のイベントを誘発できることが期待される。追加のイベントは同時のやり方で扱われるべきであり、イベントモデルへ reentrancy(再入会?) してよい。
イベントキャプチャとは、イベントのターゲットの 祖先 に登録された EventListener が、与えられた型のイベントを、イベントのターゲットによって受け取られる前に割り込ませられる処理である。キャプチャは、ツリーの頂点、一般に Document
から下方へと、以下に述べるバブリングの対称な反対になるように作用する。ツリーの頂点からイベントのターゲットへの EventTarget
の連鎖は、イベントの初期送信の前に決定される。イベント処理中にツリーに修正が発生する場合、イベントフローはツリーの初期状態に基づいて進行する。
EventTarget
上に登録されている EventListener
は、 addEventListener
メソッドの useCapture
パラメーターに true
を指定することにより、その EventListener
をキャプチャイベントに選択できる。その後、与えられた型のイベントがキャプチャするオブジェクトの 子孫 の方へ送信された場合、イベントは文書のトップとイベントのターゲットの間の直系に存在する、適切な型のあらゆるキャプチャするイベントリスナーを発動する。イベントのターゲットに到達するまで、この下方への伝播は継続する。キャプチャする EventListener
は、それが登録される EventTarget
に直接送信されたイベントによっては発動されない。
キャプチャする EventListener
が発生からイベントのこれ以上の送信の遮断を望む場合、 Event
インターフェイスの stopProgagation
メソッドを呼んでよい。これはイベントのこれ以上の送信を遮断する。しかし同じ階層レベルに登録されている追加の EventListener
はまだイベントを受け取る。一度イベントの stopPropagation
メソッドが呼ばれたら、その先へのそのメソッドの呼び出しは追加効果を持たない。追加キャプチャが存在せず stopPropagation
も呼ばれない場合は、イベントはターゲット自身の適切な EventListener
を発動する。
イベントキャプチャは、それらが通知を受け取りたいターゲット上で全当事者がそのリスナーを直接登録する delegation (代表団?) ベースのイベントモデルに似ているが、重要な 2 つの観点において異なる。 最初に、イベントキャプチャは、キャプチャする EventTarget
の 子孫 をターゲットにするイベントの遮断を許可するのみである。 それは、キャプチャする物の 先祖、その兄弟あるいはその兄弟の子孫に目標とされたイベントの遮断は許可しない。 第二に、イベントキャプチャは単一の EventTarget
のため指定ではなく、特定の型のイベントのための指定である。一度指定すればイベントキャプチャは、キャプチャする物のあらゆる 子孫 を目標とした、指定されたタイプのイベントをすべて遮る。
バブリングと特定されるイベントは、最初に、バブリングしないイベントと同じイベントフローを処理する。 イベントはその目標 EventTarget
に送信され、そこに見つかる任意のイベントリスナーが発動される。その後、バブリングイベントは、EventTarget
の親連鎖を上方へたどり、各 EventTarget
の上に登録されるあらゆるイベントリスナーをチェックして見つかる、あらゆる追加イベントリスナーを発動する。この上向きの伝播は Document
まで続く。 キャプチャする物として登録された EventListener
は、このフェイズでは発動しない。 イベントターゲットからツリーのトップへの EventTarget
の連鎖は、イベントの初期送信前に決定される。イベント処理中にツリー修正が発生する場合も、イベントフローはツリーの初期状態に基づいて進行する。
イベントハンドラは、Event
インターフェイスの stopPropagation
メソッドによって、その先へのイベント伝播を防いでよい。EventListener
がこのメソッドを呼ぶ場合、 現在の EventTarget
の上の追加 EventListener
はすべて発動される。 しかし、バブリングはそのレベルで中止される。stopPropagation
への 1 呼び出しだけが、さらなるバブリングを防ぐために要求される。
取消し可能なものと特定されるイベントもある。これらのイベントについては、 DOM 実装が一般にイベントに関連したデフォルトの動作を持っている。 例として、ウェブブラウザ中のハイパーリンクが挙げられる。 ユーザがハイパーリンクをクリックした場合のデフォルト動作は、一般に、ハイパーリンクをアクティブにすることである。 これらのイベントを処理する前に、実装は、イベントを受け取るために登録されたイベントリスナーをチェックし、 そしてそれらのリスナーにイベントを送信しなければならない。 これらのリスナーは、実装のデフォルト動作の取消し、あるいはその進行の許可の選択肢を持つ。 ブラウザ中のハイパーリンクの場合には、 動作取消しは、ハイパーリンクをアクティブにしない結果となる。
取消しは Event
の preventDefault
メソッドを呼ぶことで遂行される。1 つ以上の EventListener
がイベントフローの任意のフェイズで preventDefault
を呼ぶ場合、デフォルトの動作が取消される。
各イベントに関連して、もしあれば、種々の実装は自らのデフォルト動作を特定する。 DOMは、これらのアクションを指定することを試みない。
HTML4.0 では、イベントリスナーはエレメントの属性として指定されていた。そのようなものとして、同じタイプのイベントリスナー登録は、最初の登録を置換する。DOM2 Event Model では、単一のイベントターゲットへの複数のイベントリスナー登録を許可する。この達成の為に、イベントリスナーはもはや属性値として蓄積されない。
HTML 4.0との互換性を達成するために、実装者は、EventTarget
上で EventListener
の生成および登録としてイベントハンドラを表わす属性の設定を見てよい。 useCapture
のデフォルト値は false
。この EventListener
は、EventTarget
の上に登録されるかもしれない他の EventListener
と同じ方法で作用する。イベントリスナーを表わす属性が変更される場合、これは、前もって登録済みの EventListener
の除去、および新しいものの登録として見られるかもしれない。 HTML 4.0 のイベントリスナーに、各イベントに定義される文脈情報へのアクセスを与えるために提供される技術はない。
DOM Level 2 Event Model は、DOM 実装がイベントのの複数モジュールのサポートを可能にする。モデルは、要求されるように、新しいイベントモジュールの追加を許可するように設計された。DOM は、可能なイベントをすべて定義することを試みない。相互運用の目的のために、DOM は、より低いレベルのデバイスに依存するイベントを含むユーザインターフェースイベントのモジュール、UI 論理イベントのモジュール、および文書変更イベントのモジュールを定義する。 サードパーティに定義される任意の新しいイベント型は、大文字、小文字、混在のいずれにおいても、文字列 "DOM" で始まることはできない。この接頭辞は将来の DOM イベントモジュールのために予約される。独自イベントを追加するサードパーティには、混乱を避け他の新しいイベントとの干渉の可能性を小さくするために独自の接頭辞を使用することを強く勧める。
ユーザーインターフェイスイベントモジュールは、HTML 4.0 で挙げられるイベントと DOM Level 0 ブラウザでサポートされる追加イベントによって構成される。
DOM アプリケーションは、実装によってユーザーインターフェイスイベントモジュールがサポートされているかどうかを判定するのに、値 "UIEvents" と "2.0" をそれぞれ引数にもつ DOMImplementation
の hasFeature(feature, version)
メソッドを使用できる。このモジュールの完全なサポートのために、この仕様で定義される "Events" の特徴と DOM Level 2 Views [DOM Level 2 Views] で定義される "Views" の特徴を、実装はサポートしなければならない。DOM Level 2 Core 仕様 [DOM Level 2 Core] における 適合 については追加情報を参照されたし。
Note: UIEvent
インターフェイスのインスタンス作成には、DocumentEvent
インターフェイスの createEvent
メソッドに使用される入力パラメータの値としてフィーチャー文字列 "UIEvents" を使用する。
起こりうるイベントのさまざまな型は:
EventTarget
がフォーカスを得たときに発生。HTML イベントフォーカスとは異なり、DOMFocusIn はフォームコントロールだけでなく、任意のフォーカスを受け取れる EventTarget
に適用できる。
EventTarget
がフォーカスを失ったときに発生。HTML イベントフォーカスとは異なり、DOMFocusOut はフォームコントロールだけでなく、任意のフォーカスを受け取れる EventTarget
に適用できる。
マウスイベントモジュールは、HTML 4.0 で挙げられるイベントと DOM Level 0 ブラウザでサポートされる追加イベントによって構成される。このイベントモジュールは、マウス入力デバイスでの使用のために特別に設計されている。
DOM アプリケーションは、実装によって Mutation イベントモジュールがサポートされているかどうかを判定するのに、値 "MouseEvents" と "2.0" をそれぞれ引数にもつ DOMImplementation
の hasFeature(feature, version)
メソッドを使用できる。このモジュールの完全なサポートのために、この仕様で定義される "UIEvents" の特徴を、実装はサポートしなければならない。DOM Level 2 Core 仕様 [DOM Level 2 Core] における 適合 については追加情報を参照されたし。
Note: MouseEvent
インターフェイスのインスタンス作成には、DocumentEvent
インターフェイスの createEvent
メソッドに使用される入力パラメータの値としてフィーチャー文字列 "MouseEvents" を使用する。
起こりうるマウスイベントのさまざまな型は:
mousedown mouseup click
detail
アトリビュートを伴ってシーケンスが繰り返される。このイベントはほとんどのエレメントで有効である。
EventTarget
the pointing device is exiting.EventTarget
the pointing device is entering.DOM Level 2 Event 仕様はキーイベントモジュールを提供しない。キーボード入力デバイスのために設計されるイベントモジュールは、DOM 仕様の今後のバージョンに含まれるであろう。
ミューテーションイベントモジュールは、属性およびテキストの修正を含む文書構造の任意の変更の通知を許可するために設計される。canselable として設計されるミューテーションイベントは存在しない。これは、関連するイベントの取り消しによって、文書への任意の変更が起こるかもしれず、また起こらないかもしれない場合、文書の修正を引き起こす既存の DOM インターフェイスの利用が、非常に困難であるという事実に由来する。まだ希望の将来性だが、それが DOM へのトランザクション追加まで一層よく残されることが決定された。Although this is still a desired capability, it was decided that it would be better left until the addition of transactions into the DOM.
多くの単一のツリーの修正は、複合的なミューテーションイベントを誘発させられる。ツリーのすべての可能な修正によるミューテーションイベントオーダーの指定の試みよりむしろ、これらのイベントオーダーが実装に残される。
DOM アプリケーションは、実装によって Mutation イベントモジュールがサポートされているかどうかを判定するのに、値 "MutationEvents" と "2.0" をそれぞれ引数にもつ DOMImplementation
の hasFeature(feature, version)
メソッドを使用できる。このモジュールの完全なサポートのために、この仕様で定義される "Events" の特徴を、実装はサポートしなければならない。DOM Level 2 Core 仕様 [DOM Level 2 Core] における 適合 については追加情報を参照されたし。
Note: MutationEvent
インターフェイスのインスタンス作成には、DocumentEvent
インターフェイスの createEvent
メソッドに使用される入力パラメータの値としてフィーチャー文字列 "MutationEvents" を使用する。
発生しうる Mutation イベントのさまざまな型は:
Attr
が修正されるときに発生。このイベントのターゲットは変更される Attr
を持つ Node
である。attrChange の値が Attr
が修正されたか、追加されたか、削除されたかを表す。relatedNode の値が影響を受けた Attr
ノードをあらわす。その独自性を変更しないで、Attr
の値の交換に基づく文字列が Attr
の修正として表示されることが期待される。その後、異なる Attr
ノードとの Attr
ノードの交換は、最初の Attr
ノードの削除と次のノードの追加として表示される。
HTML イベントモジュールは、HTML 4.0 中でリストされるイベント、そして DOM Level 0 のブラウザによってサポートされる追加イベントによって構成される。
DOM アプリケーションは、実装によって HTML イベントモジュールがサポートされているかどうかを判定するのに、値 "HTMLEvents" と "2.0" をそれぞれ引数にもつ DOMImplementation
の hasFeature(feature, version)
メソッドを使用できる。このモジュールの完全なサポートのために、この仕様で定義される "Events" の特徴を、実装はサポートしなければならない。DOM Level 2 Core 仕様 [DOM Level 2 Core] における 適合 については追加情報を参照されたし。
Note: HTML イベントモジュールための Event
インターフェイスのインスタンス作成には、DocumentEvent
インターフェイスの createEvent
メソッドに使用される入力パラメータの値としてフィーチャー文字列 "HTMLEvents" を使用する。
HTML イベントは文脈情報を渡すために基本 DOM Event インターフェイスを使用する。
発生しうるイベントのさまざまな型は: