--- title: EventTarget slug: Web/API/EventTarget tags: - API - Cible de l'événement - DOM - DOM Events - EventTarget - Interface - Événements DOM browser-compat: api.EventTarget translation_of: Web/API/EventTarget ---

EventTarget est une interface DOM implémentée par des objets qui peuvent recevoir des événements et peuvent avoir des écouteurs pour eux.

{{domxref ("Element")}}, {{domxref ("Document")}} et {{domxref ("Window")}} sont les cibles d'événements les plus fréquentes, mais d'autres objets peuvent également être des cibles d'événements. Par exemple {{domxref ("XMLHttpRequest")}}, {{domxref ("AudioNode")}}, {{domxref ("AudioContext")}} et autres.

De nombreuses cibles d'événements (y compris des éléments, des documents et des fenêtres) supporte également la définition de gestionnaires d'événements via les propriétés et attributs onevent.

{{InheritanceDiagram}}

Constructeur

{{domxref("EventTarget.EventTarget()", "EventTarget()")}}
Crée une nouvelle instance d'objet EventTarget.

Méthodes

{{domxref("EventTarget.addEventListener()", "EventTarget.addEventListener()")}}
Enregistre un gestionnaire d'événements d'un type d'événement spécifique sur EventTarget.
{{domxref("EventTarget.removeEventListener()", "EventTarget.removeEventListener()")}}
Supprime un écouteur d'événement de EventTarget.
{{domxref("EventTarget.dispatchEvent()", "EventTarget.dispatchEvent()")}}
Envoie un événement à cet EventTarget.

Méthodes supplémentaires dans la base de code Chrome de Mozilla

Mozilla inclut quelques extensions à utiliser par les cibles d'événements implémentées par JS pour implémenter les propriétés onevent.

Voir aussi liaisons WebIDL.

Exemple

Implémentation simple d'EventTarget

const 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
  }
  const stack = this.listeners[type]
  for (let 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
  }
  const stack = this.listeners[event.type].slice()

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

Spécifications

{{Specifications}}

Compatiblité des navigateurs

{{Compat}}

Voir également