イベントオブジェクトの作成

イベント、Event インターフェイス (DOM)

仕様書

状態

[8] イベントは次の状態を持ちます。

インターフェイス
Event か、それを継承したインターフェイスを使います。
対象
[11] currentTarget 属性
[29] bubbles
[30] cancelable
[12] 伝播停止フラグ
[13] 直ちに伝播停止フラグ
[14] 取り消し済みフラグ
[15] 初期化済みフラグ
[16] 派遣フラグ
受動的リスナー内フラグ
受動的イベントリスナーの処理中かどうかのフラグです。 preventDefault メソッドの動作に影響します。
[17] isTrusted 属性
[18] timeStamp 属性
capturing, at target, bubbling のどの段階かを表します。
経路
合成フラグ
関連対象
item-in-shadow-tree

[19] Event継承する子インターフェイスは、 それぞれの追加の状態を持ちます。

メンバー

[44] Event インターフェイスは次のメンバーを持ちます。

子インターフェイス

[20] Event継承した子インターフェイスはたくさんあります。

イベントの生涯

[31] イベントは次のように進行します。

  1. [32] イベントの作成
  2. [33] 初期化 (>>21)
  3. [34] dispatch
  4. [35] 既定動作

[36] >>35DOM3 までは存在していましたが、 DOM Standard では明示的に言及していません。 ただし概念的に相当するものは現在も残っています。

[37] Webブラウザーにより生成されるイベントは通常「発火」によって >>32>>33>>34 が順に行われ、その後 >>35 が存在すれば実行されることになります。

[38] DOM2DOM3 の処理モデルによれば >>32createEvent>>33initEvent 系メソッド、 >>34dispatchEvent によって実行でき、 >>34 の返り値によって >>35 の実行可否を判断できることになっていました。 現在でも著者による JavaScript コードはこの流れでイベントを実行させられますが、 古い方法となっています。

[39] DOM Standard によれば >>32>>33Eventコンストラクターにより実行でき、 >>34>>35>>38 同様に dispatchEvent を利用できます。ただし >>37 の場合とは isTrusted の値が変わりますから、著者による JavaScriptWebブラウザーと同一のイベントを発生させることは現在ではできなくなっています。

[40] Event インターフェイスとそれを継承するほとんどのインターフェイスは、 コンストラクターを持ちます。

[41] BeforeUnloadEvent インターフェイスは、 コンストラクターを持ちません。

作成

[80] イベントオブジェクトの作成は、 イベントコンストラクターによるもの (>>59)、 createEvent によるもの、 その他利用者エージェントによるものの3通りの方法に大別できます。


[81] 利用者エージェントによるイベントオブジェクトの作成と createEvent は、イベントの作成の方法に従ってイベントオブジェクトを作成します。

[47] イベントの作成 (create an event) は、 Event またはその子インターフェイスイベントインターフェイスRealm realm (既定値 null) について、 次のようにします >>79

  1. [83] イベントを、 内部イベント作成手順群を実行した結果に設定します。
    イベントインターフェイス
    イベントインターフェイス
    realm
    realm
    時刻
    イベントの表す事項の発生した時刻
    辞書
    JavaScript値 undefinedイベントインターフェイスコンストラクターの第2引数の辞書型変換した結果
  2. [82] イベントisTrusted を、に設定します。
  3. [84] イベントを返します。

[74] 例えば Mac OS X入力イベント由来の場合、 NSEventtimestamp時刻として使えます >>79

[55] イベントの作成は色々な場面で呼び出されます。

[86] イベントを作成する文脈

[87] 内部イベント作成手順群 (inner event creation steps) は、 イベントインターフェイスrealm時刻辞書について、 次のようにします >>79

  1. [88] イベントを、新しいオブジェクトに設定します。
  2. [89] イベント初期化済みフラグを、に設定します。
  3. [90] イベントtimeStamp を、 時刻起源から時刻までの高精度時刻を表す DOMHighResTimeStamp に設定します。
  4. [48] 辞書の各 (名前) について、
    1. [49] イベント名前 を、 に設定します。
  5. [97] イベントイベント構築手順群 (event constructing steps) を実行します。 イベントインターフェイスにより、
    その他の場合
    何もしません。
  6. [50] イベントを返します。
[56] DeviceMotionEvent では初期化の辞書辞書メンバー辞書で、 IDL属性がその辞書から初期化されるオブジェクトとなっていますから、 単なる値のコピーではない操作が必要です。

[51] イベントの作成イベントコンストラクターから呼び出されます。

初期化

[21] イベントは作成されたあと初期化 (initialize) する必要があります。 初期化により type, bubbles, cancelable の値が設定されます。またイベント型依存の各種の値も同時に設定されます。

[22] 初期化すると初期化済みフラグ (initialized flag) が設定されます。

[23] 初期化は派遣フラグが設定されるまでは何度でも行えます。

[24] 初期化は2通りの方法で実行できます。

[27] >>26DOM2 から用意されていた方法です。また当初 DOM3 では initEventNS メソッドも定義されていました。更に、 Event の子インターフェイスはそれぞれ initMouseEventinitMouseEventNS のようなメソッドを定義していました。

[28] >>26 は 2012年頃に DOM Standard に追加された方法です。初期の DOMイベントの実装には存在していません。現在ではこちらの方法を使うのが望ましいとされ、 initEvent 系のメソッドは互換性のために必要なものを除き仕様からも削除されています。

イベントコンストラクター

[59] Event インターフェイスとその子インターフェイスは、 一部の例外を除き、コンストラクターを持ちます。

[60] Event コンストラクター (new Event) は引数EventInit 辞書を受け取ることができます。 コンストラクターを持つ子インターフェイスも、 それぞれに対応する辞書 () が存在し、それを引数で受け取ることができます。

[53] Event またはその子インターフェイスインターフェイスコンストラクターが呼び出されたら、 次のようにしなければなりません >>79

  1. [72] イベント型を、第1引数を DOMString と解釈した結果に設定します。
  2. [91] 辞書を、辞書型 (EventInit またはそれを継承する辞書であり、 具体的にはインターフェイス依存。必須か否かもインターフェイス依存。) と解釈した結果に設定します。
  3. [92] イベントを、内部イベント作成手順群を実行した結果に設定します。
    イベントインターフェイス
    インターフェイス
    realm
    null
    時刻
    現在
    辞書
    辞書
  4. [93] イベントを、 イベント型に設定します。
  5. [94] イベントを返します。

initEvent メソッド

[62] MessageEvent インターフェイスinitMessageEvent メソッド は、引数としてイベント型bubbles取り消し可能dataoriginlastEventIdsourceports を受け取ります >>61

メンバー

[1]

altKeyHTMLEventObj (Trident)
altLeftHTMLEventObj3 (Trident)
behaviorCookieHTMLEventObj3 (Trident)
behaviorPartHTMLEventObj3 (Trident)
bookmarksHTMLEventObj2 (Trident)
boundElementsHTMLEventObj2 (Trident)
buttonHTMLEventObj (Trident)
cancelBubbleHTMLEventObj (Trident)
clientXHTMLEventObj (Trident)
clientYHTMLEventObj (Trident)
contentOverflowHTMLEventObj3 (Trident)
ctrlKeyHTMLEventObj (Trident)
ctrlLeftHTMLEventObj3 (Trident)
dataevent (JavaScript 1.2)
dataFldHTMLEventObj2 (Trident)
dataTransferHTMLEventObj2 (Trident)
fromElementHTMLEventObj (Trident)
getAttributeHTMLEventObj2 (Trident)
heightevent (JavaScript 1.2)
imeCompositionChangeHTMLEventObj3 (Trident)
imeNotifyCommandHTMLEventObj3 (Trident)
imeNotifyDataHTMLEventObj3 (Trident)
imeRequestHTMLEventObj3 (Trident)
imeRequestDataHTMLEventObj3 (Trident)
keyboardLayoutHTMLEventObj3 (Trident)
keyCodeHTMLEventObj (Trident)
layerXevent (JavaScript 1.2)
layerYevent (JavaScript 1.2)
modifiersevent (JavaScript 1.2)
nextPageHTMLEventObj3 (Trident)
offsetXHTMLEventObj (Trident)
offsetYHTMLEventObj (Trident)
pageXevent (JavaScript 1.2)
pageYevent (JavaScript 1.2)
propertyNameHTMLEventObj2 (Trident)
qualifierHTMLEventObj (Trident)
reasonHTMLEventObj (Trident)
recordsetHTMLEventObj2 (Trident)
removeAttributeHTMLEventObj2 (Trident)
repeatHTMLEventObj2 (Trident)
returnValueHTMLEventObj (Trident)
screenXHTMLEventObj (Trident), event (JavaScript 1.2)
screenYHTMLEventObj (Trident), event (JavaScript 1.2)
setAttributeHTMLEventObj2 (Trident)
shiftKeyHTMLEventObj (Trident)
shiftLeftHTMLEventObj3 (Trident)
srcElementHTMLEventObj (Trident)
srcFilterHTMLEventObj (Trident)
srcUrnHTMLEventObj2 (Trident)
targetevent (JavaScript 1.2)
toElementHTMLEventObj (Trident)
typeHTMLEventObj (Trident), event (JavaScript 1.2)
wheelDeltaHTMLEventObj4 (Trident)
whichevent (JavaScript 1.2)
widthevent (JavaScript 1.2)
xHTMLEventObj (Trident), event (JavaScript 1.2)
yHTMLEventObj (Trident), event (JavaScript 1.2)

[2] [whatwg] Enhancement request: change EventSource to allow cross-domain access ( ( 版)) http://lists.whatwg.org/htdig.cgi/whatwg-whatwg.org/2011-June/032152.html

[3] Simplified initializing of synthetic events — Anne’s Blog ( 版) http://annevankesteren.nl/2011/06/initializing-events

[4] Simplified initializing of synthetic events — Anne’s Blog ( 版) http://annevankesteren.nl/2011/06/initializing-events

[5] IRC logs: freenode / #whatwg / 20110926 ( ( 版)) http://krijnhoetmer.nl/irc-logs/whatwg/20110926

[6] XBL 2.0 ( ( 版)) http://dev.w3.org/2006/xbl2/Overview.html#the-eventxbl-interface

[42] Editorial: define Event attribute defaults through IDL · whatwg/html@0be0229 ( 版) https://github.com/whatwg/html/commit/0be02299f128cbb7c65a7ce259fdd838fd44a4b5

[43] Change IDL for OnErrorEventHandlerNonNull from column to colno by zcorpan · Pull Request #1331 · whatwg/html ( ()) https://github.com/whatwg/html/pull/1331

[45] Editorial: provide a shorthand for other specifications to create events (annevk著, ) https://github.com/whatwg/dom/commit/e728c11c4aeab35573f0d77270066202f8739475

[46] Add a realm argument to "create an event" (domenic著, ) https://github.com/whatwg/dom/commit/64444fad86d3820663744a876e92ce69276313db

[54] Editorial: use "creating an event" more and refactor click() (annevk著, ) https://github.com/whatwg/html/commit/467b98781f82f6bf1a91fad435982ff27d8d9999

[57] Check dispatch flag before initializing https://www.w3.org/Bugs/Public/s... · ccacdec · whatwg/dom ( 版) https://github.com/whatwg/dom/commit/ccacdec1b3c99019677e8737c8f8550583984e67

[58] Fix issue 44: initFocusEvent not needed · w3c/uievents@b5c7942 ( 版) https://github.com/w3c/uievents/commit/b5c7942ee5b75ae7e213f12107a12ae0ce2e84fb

[63] Web Applications 1.0 r8711 Add initMessageEvent() ( ( 版)) http://html5.org/r/8711

[64] Tweak nullability in initMessageEvent() and MessageEventInit · whatwg/html@99f79f2 ( 版) https://github.com/whatwg/html/commit/99f79f20c4033d0db4bc4e5c9609c6a3e23cbbe0

[65] Use USVString for all URLs ( (domenic著, )) https://github.com/whatwg/html/commit/018b983b77b2cd908f6d00100e7e0abe893dd2c3

[66] Make initEvent()/initCustomEvent() arguments optional except the first (cdumez著, ) https://github.com/whatwg/dom/commit/23587350d4ba2bb878ffdd4e94a8050213b71751

[67] Specify the arguments of initCompositionEvent() · Issue #134 · w3c/uievents () https://github.com/w3c/uievents/issues/134

[68] Specify the arguments of initMouseEvent() · Issue #136 · w3c/uievents () https://github.com/w3c/uievents/issues/136

[69] Clearly specify initUIEvent · Issue #133 · w3c/uievents () https://github.com/w3c/uievents/issues/133

[70] Make parameters to initMessageEvent() optional except the first (cdumez著, ) https://github.com/whatwg/html/commit/2dafd2fbf9b08e58f126b112ef26aff4cb84b954

[71] Make Event's timeStamp use DOMHighResTimeStamp (majido著, ) https://github.com/whatwg/dom/commit/912d58746bc4c67c2fd210124639f7c34991fce5

[73] Make Event's timeStamp use DOMHighResTimeStamp (majido著, ) https://github.com/whatwg/dom/commit/912d58746bc4c67c2fd210124639f7c34991fce5

[75] Expose Event and EventTarget to AudioWorklet (hoch著, ) https://github.com/whatwg/dom/commit/601655d48abe3979200e42cefad60cdf0d752693

[76] [audioworklet] Ensure MessagePort is exposed in audio worklets · Issue #1266 · WebAudio/web-audio-api () https://github.com/WebAudio/web-audio-api/issues/1266

[77] Expose Event, EventTarget to AudioWorklet · Issue #515 · whatwg/dom () https://github.com/whatwg/dom/issues/515

[78] Fix 515: Expose Event, EventTarget to AudioWorklet by hoch · Pull Request #516 · whatwg/dom () https://github.com/whatwg/dom/pull/516

[52] Make the two ways of event creation share a path (annevk著, ) https://github.com/whatwg/dom/commit/0283565d2a3f767befd368248b788b5f5803baf2

[95] Make the two ways of event creation share a path by annevk · Pull Request #603 · whatwg/dom () https://github.com/whatwg/dom/pull/603

[96] Define event constructing steps (annevk著, ) https://github.com/whatwg/dom/commit/4c95d89624f695e9d74fd545b004ae85ca3cd6b6

[98] "create an event" doesn't work for certain UI events · Issue #414 · whatwg/dom () https://github.com/whatwg/dom/issues/414

[99] Define event constructing steps by annevk · Pull Request #614 · whatwg/dom () https://github.com/whatwg/dom/pull/614

[100] Define "event constructing steps" for complicated events · Issue #194 · w3c/uievents () https://github.com/w3c/uievents/issues/194

[101] Define init*Event() methods imperatively · Issue #191 · w3c/uievents () https://github.com/w3c/uievents/issues/191

[9] Add initStorageEvent() (foolip著, ) https://github.com/whatwg/html/commit/18ca10633ffbcbe2a95dd1d42dfb04c798cc5700

[10] Add more init*Event()? · Issue #1054 · whatwg/html () https://github.com/whatwg/html/issues/1054

[102] Add initStorageEvent() by foolip · Pull Request #4063 · whatwg/html () https://github.com/whatwg/html/pull/4063

[103] Align with IDL dictionary changes (annevk著, ) https://github.com/whatwg/dom/commit/c15e65f193ab7561485606158c72f491c67f4b11

[104] Align with IDL constructor changes (autokagami著, ) https://github.com/whatwg/dom/commit/57512fac17cf2f1c4c85be4aec178c8086ee5ee4

[105] Update to constructor operations · Issue #780 · whatwg/dom () https://github.com/whatwg/dom/issues/780