EventTarget は、イベントを受け取り、そのためのリスナーを持つ可能性があるオブジェクトにより実装されたインターフェースです。

Element および documentwindow は、最も一般的なイベントターゲットですが、他のオブジェクトもイベントターゲットになります。例えば、XMLHttpRequestAudioNodeAudioContext 他。

多くのイベントターゲット (要素、document、window を含む) も、on... プロパティや属性を経由した イベントハンドラ の設定をサポートしています。

コンストラクター

EventTarget()
新しい EventTarget オブジェクトのインスタンスを作成します。

メソッド

EventTarget.addEventListener()
EventTarget 上に特定のイベント種別のイベントハンドラを登録します。
EventTarget.removeEventListener()
EventTarget からイベントリスナーを削除します。
EventTarget.dispatchEvent()
この EventTarget にイベントを送出します。

Mozilla chrome コード向けの追加メソッド

on* プロパティを実装するために JavaScript で実装されたイベントターゲットを使用するための Mozilla 拡張があります。WebIDL バインディング も参照してください。

  • void setEventHandler(DOMString type, EventHandler handler)
  • EventHandler getEventHandler(DOMString type)

EventTarget の簡易実装

var EventTarget = function() {
  this.listeners = {};
};

EventTarget.prototype.listeners = null;
EventTarget.prototype.addEventListener = function(type, callback) {
  if (!(type in this.listeners)) {
    this.listeners[type] = [];
  }
  this.listeners[type].push(callback);
};

EventTarget.prototype.removeEventListener = function(type, callback) {
  if (!(type in this.listeners)) {
    return;
  }
  var stack = this.listeners[type];
  for (var i = 0, l = stack.length; i < l; i++) {
    if (stack[i] === callback){
      stack.splice(i, 1);
      return;
    }
  }
};

EventTarget.prototype.dispatchEvent = function(event) {
  if (!(event.type in this.listeners)) {
    return true;
  }
  var stack = this.listeners[event.type].slice();

  for (var i = 0, l = stack.length; i < l; i++) {
    stack[i].call(this, event);
  }
  return !event.defaultPrevented;
};

仕様

仕様書 策定状況 備考
DOM
EventTarget の定義
現行の標準 変更なし。
Document Object Model (DOM) Level 3 Events Specification
EventTarget の定義
廃止された いくつかの引数は任意 (listener)、または null 値を許可 (useCapture)。
Document Object Model (DOM) Level 2 Events Specification
EventTarget の定義
廃止された 初期定義。

ブラウザーの実装状況

Update compatibility data on GitHub
デスクトップモバイル
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewAndroid 版 ChromeEdge MobileAndroid 版 FirefoxAndroid 版 OperaiOS 版 SafariSamsung Internet
基本対応Chrome 完全対応 1Edge 完全対応 ありFirefox 完全対応 1IE 完全対応 9Opera 完全対応 7Safari 完全対応 10.1
完全対応 10.1
未対応 1 — 10.1
補足
補足 Window.EventTarget did not exist on versions of Safari before 10.1.
WebView Android 完全対応 1Chrome Android 完全対応 18Edge Mobile 完全対応 ありFirefox Android 完全対応 4Opera Android 完全対応 7Safari iOS 完全対応 10.1
完全対応 10.1
未対応 1 — 10.1
補足
補足 Window.EventTarget did not exist on versions of Safari iOS before 10.1.
Samsung Internet Android 完全対応 あり
EventTarget() constructorChrome 完全対応 64Edge ? Firefox 完全対応 59IE 未対応 なしOpera 完全対応 51Safari 未対応 なしWebView Android 完全対応 64Chrome Android 完全対応 64Edge Mobile ? Firefox Android 完全対応 59Opera Android 完全対応 51Safari iOS 未対応 なしSamsung Internet Android 未対応 なし
addEventListenerChrome 完全対応 1
補足
完全対応 1
補足
補足 Before Chrome 49, the type and listener parameters were optional.
Edge 完全対応 12Firefox 完全対応 1IE 完全対応 9
完全対応 9
未対応 6 — 11
補足 代替名
補足 Older versions of IE supported an equivalent, proprietary EventTarget.attachEvent() method.
代替名 非標準の名前 attachEvent を使用しています。
Opera 完全対応 7Safari 完全対応 1WebView Android 完全対応 1
補足
完全対応 1
補足
補足 Before Chrome 49, the type and listener parameters were optional.
Chrome Android 完全対応 18
補足
完全対応 18
補足
補足 Before Chrome 49, the type and listener parameters were optional.
Edge Mobile 完全対応 ありFirefox Android 完全対応 4Opera Android 完全対応 7Safari iOS 完全対応 1Samsung Internet Android 完全対応 あり
dispatchEventChrome 完全対応 4Edge 完全対応 12Firefox 完全対応 2IE 完全対応 9
完全対応 9
未対応 6 — 11
補足 代替名
補足 Older versions of IE supported an equivalent, proprietary EventTarget.fireEvent() method.
代替名 非標準の名前 fireEvent を使用しています。
Opera 完全対応 9Safari 完全対応 3.2WebView Android 完全対応 4Chrome Android 完全対応 18Edge Mobile 完全対応 ありFirefox Android 完全対応 4Opera Android 完全対応 ありSafari iOS 完全対応 ありSamsung Internet Android 完全対応 あり
removeEventListenerChrome 完全対応 1Edge 完全対応 12Firefox 完全対応 1IE 完全対応 9
完全対応 9
未対応 6 — 11
補足 代替名
補足 Older versions of IE supported an equivalent, proprietary EventTarget.detachEvent() method.
代替名 非標準の名前 detachEvent を使用しています。
Opera 完全対応 7Safari 完全対応 1WebView Android 完全対応 1Chrome Android 完全対応 18Edge Mobile 完全対応 ありFirefox Android 完全対応 4Opera Android 完全対応 7Safari iOS 完全対応 1Samsung Internet Android 完全対応 あり

凡例

完全対応  
完全対応
未対応  
未対応
実装状況不明  
実装状況不明
実装ノートを参照してください。
実装ノートを参照してください。
非標準の名前を使用しています。
非標準の名前を使用しています。

関連情報

ドキュメントのタグと貢献者

このページの貢献者: yyss, Marsf, mikamikuh, fscholz
最終更新者: yyss,