--- title: EventTarget slug: Web/API/EventTarget tags: - API - DOM - DOM Events - EventTarget - Interface translation_of: Web/API/EventTarget ---

{{ ApiRef("DOM Events") }}

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

{{domxref("Element")}} および {{domxref("document")}}、{{domxref("window")}} は、最も一般的なイベントターゲットですが、他のオブジェクトもイベントターゲットになります。例えば、{{domxref("XMLHttpRequest")}}、{{domxref("AudioNode")}}、{{domxref("AudioContext")}} 他。

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

{{InheritanceDiagram}}

コンストラクター

{{domxref("EventTarget.EventTarget()","EventTarget()")}}
新しい EventTarget オブジェクトのインスタンスを作成します。

メソッド

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

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

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

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;
};

仕様

仕様書 策定状況 備考
{{SpecName('DOM WHATWG', '#interface-eventtarget', 'EventTarget')}} {{Spec2('DOM WHATWG')}} 変更なし。
{{SpecName('DOM3 Events', 'DOM3-Events.html#interface-EventTarget', 'EventTarget')}} {{Spec2('DOM3 Events')}} いくつかの引数は任意 (listener)、または null 値を許可 (useCapture)。
{{SpecName('DOM2 Events', 'events.html#Events-EventTarget', 'EventTarget')}} {{Spec2('DOM2 Events')}} 初期定義。

ブラウザーの実装状況

{{Compat("api.EventTarget")}}

関連情報