EventTarget is an interface implemented by objects that can receive events and may have listeners for them.
Element, document, and window are the most common event targets, but other objects can be event targets too, for example XMLHttpRequest, AudioNode, AudioContext, and others.
Many event targets (including elements, documents, and windows) also support setting event handlers via on... properties and attributes.
<div id="interfaceDiagram" style="display: inline-block; position: relative; width: 100%; padding-bottom: 11.666666666666666%; vertical-align: middle; overflow: hidden;"><svg style="display: inline-block; position: absolute; top: 0; left: 0;" viewbox="-50 0 600 70" preserveAspectRatio="xMinYMin meet"><a xlink:href="https://developer.mozilla.org/en-US/docs/Web/API/EventTarget" target="_top"><rect x="1" y="1" width="110" height="50" fill="#F4F7F8" stroke="#D4DDE4" stroke-width="2px" /><text x="56" y="30" font-size="12px" font-family="Consolas,Monaco,Andale Mono,monospace" fill="#4D4E53" text-anchor="middle" alignment-baseline="middle">EventTarget</text></a></svg></div>
a:hover text { fill: #0095DD; pointer-events: all;}
Constructor
EventTarget()- Creates a new
EventTargetobject instance.
Methods
EventTarget.addEventListener()- Register an event handler of a specific event type on the
EventTarget. EventTarget.removeEventListener()- Removes an event listener from the
EventTarget. EventTarget.dispatchEvent()- Dispatch an event to this
EventTarget.
Additional methods for Mozilla chrome code
Mozilla extensions for use by JS-implemented event targets to implement on* properties. See also WebIDL bindings.
- void setEventHandler(DOMString type, EventHandler handler)
- EventHandler getEventHandler(DOMString type)
Example:
Simple implementation of 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];
for (var i = 0, l = stack.length; i < l; i++) {
stack[i].call(this, event);
}
return !event.defaultPrevented;
};
Specifications
| Specification | Status | Comment |
|---|---|---|
| DOM The definition of 'EventTarget' in that specification. |
Living Standard | No change. |
| Document Object Model (DOM) Level 3 Events Specification The definition of 'EventTarget' in that specification. |
Obsolete | A few parameters are now optional (listener), or accepts the null value (useCapture). |
| Document Object Model (DOM) Level 2 Events Specification The definition of 'EventTarget' in that specification. |
Obsolete | Initial definition. |
Browser compatibility
| Feature | Chrome | Edge | Firefox | Internet Explorer | Opera | Safari |
|---|---|---|---|---|---|---|
| Basic support | 1 | Yes | 1 | 9 | 7 | 10.1 1 — 10.11 |
EventTarget() constructor | 64 | ? | 59 | No | 51 | No |
addEventListener | 13 | Yes | 1 | 9 | 7 | 1 |
dispatchEvent | 4 | Yes | 2 | 9 | 9 | 3.2 |
removeEventListener | 1 | Yes | 1 | 9 | 7 | 1 |
| Feature | Android webview | Chrome for Android | Edge mobile | Firefox for Android | Opera Android | iOS Safari | Samsung Internet |
|---|---|---|---|---|---|---|---|
| Basic support | 1 | 1 | Yes | 4 | 7 | 10.1 1 — 10.12 | ? |
EventTarget() constructor | 64 | 64 | ? | 59 | 51 | No | ? |
addEventListener | 13 | 13 | Yes | 4 | 7 | 1 | ? |
dispatchEvent | 4 | 4 | Yes | 4 | Yes | Yes | ? |
removeEventListener | 1 | 1 | Yes | 4 | 7 | 1 | ? |
1. Window.EventTarget did not exist on versions of Safari before 10.1.
2. Window.EventTarget did not exist on versions of Safari iOS before 10.1.
3. Before Chrome 49, the type and listener parameters were optional.
4. Older versions of IE supported an equivalent, proprietary, EventTarget.attachEvent() method.
5. Supported as attachEvent.
6. Older versions of IE supported an equivalent, proprietary, EventTarget.fireEvent() method.
7. Supported as fireEvent.
See Also
- Event reference - the events available in the platform.
- Event developer guide
Eventinterface

