--- title: EventTarget slug: Web/API/EventTarget tags: - API - DOM - DOM Events - Interface - NeedsTranslation - TopicStub translation_of: Web/API/EventTarget ---
{{ApiRef("DOM Events")}}
EventTarget is an interface implemented by objects that can receive events and may have listeners for them.
{{domxref("Element")}}, {{domxref("document")}}, and {{domxref("window")}} are the most common event targets, but other objects can be event targets too, for example {{domxref("XMLHttpRequest")}}, {{domxref("AudioNode")}}, {{domxref("AudioContext")}}, and others.
Many event targets (including elements, documents, and windows) also support setting event handlers via on... properties and attributes.
EventTarget.EventTarget.EventTarget.Mozilla extensions for use by JS-implemented event targets to implement on* properties. See also WebIDL bindings.
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];
event.target = this;
for (var i = 0, l = stack.length; i < l; i++) {
stack[i].call(this, event);
}
return !event.defaultPrevented;
};
{{ EmbedLiveSample('_Simple_implementation_of_EventTarget') }}
| Specification | Status | Comment |
|---|---|---|
| {{SpecName('DOM WHATWG', '#interface-eventtarget', 'EventTarget')}} | {{Spec2('DOM WHATWG')}} | No change. |
| {{SpecName('DOM3 Events', 'DOM3-Events.html#interface-EventTarget', 'EventTarget')}} | {{Spec2('DOM3 Events')}} | A few parameters are now optional (listener), or accepts the null value (useCapture). |
| {{SpecName('DOM2 Events', 'events.html#Events-EventTarget', 'EventTarget')}} | {{Spec2('DOM2 Events')}} | Initial definition. |
{{CompatibilityTable}}
| Feature | Chrome | Edge | Firefox (Gecko) | Internet Explorer | Opera | Safari (WebKit) |
|---|---|---|---|---|---|---|
| Basic support | 1.0 | {{CompatVersionUnknown}} | {{CompatGeckoDesktop("1")}} | 9.0 | 7 | 1.0[1] |
| Feature | Android | Edge | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile |
|---|---|---|---|---|---|---|
| Basic support | 1.0 | {{CompatVersionUnknown}} | {{CompatGeckoMobile("1")}} | 9.0 | 6.0 | 1.0 |
[1] window.EventTarget does not exist.