Get to know MDN better
Cette page a été traduite à partir de l'anglais par la communauté. Vous pouvez contribuer en rejoignant la communauté francophone sur MDN Web Docs.
Cette fonctionnalité est bien établie et fonctionne sur de nombreux appareils et versions de navigateurs. Elle est disponible sur tous les navigateurs depuis juillet 2015.
* Certaines parties de cette fonctionnalité peuvent bénéficier de prise en charge variables.
Note : Cette fonctionnalité est disponible via les Web Workers.
La méthode addEventListener() de l'interface EventTarget permet de définir une fonction qui sera appelée chaque fois que l'évènement défini est envoyé à la cible.
Les cibles courantes sont Element, ses enfants, Document et Window, mais la cible peut être tout objet prenant en charge les évènements (par exemple IDBRequest).
Note : La méthode addEventListener() est la manière recommandée d'enregistrer un écouteur d'évènements. Les avantages sont les suivants :
La méthode addEventListener() fonctionne en ajoutant une fonction, ou un objet qui implémente une fonction handleEvent(), à la liste des écouteurs d'évènements pour le type d'évènement défini sur le EventTarget sur lequel elle est appelée. Si la fonction ou l'objet est déjà dans la liste des écouteurs pour cette cible, la fonction ou l'objet n'est pas ajoutée une seconde fois.
Note : Si une fonction anonyme particulière figure déjà dans la liste des écouteurs d'évènements enregistrés pour une cible donnée, et qu'une fonction anonyme identique est ensuite transmise à addEventListener, la seconde fonction sera aussi ajoutée à la liste des écouteurs pour cette cible.
En effet, deux fonctions anonymes ne sont jamais identiques, même si elles sont définies à partir du même code source inchangé, y compris dans une boucle.
Redéfinir plusieurs fois la même fonction anonyme dans ce genre de cas peut poser problème. (Voir Problèmes de mémoire ci-dessous.)
Si un écouteur d'évènement est ajouté à un EventTarget depuis un autre écouteur — c'est-à-dire pendant le traitement de l'évènement — l'évènement en cours ne déclenchera pas le nouvel écouteur. Cependant, ce nouvel écouteur pourra être déclenché lors d'une phase ultérieure du cycle de l'évènement, par exemple lors de la phase de propagation (bubbling).
Une chaîne de caractères sensible à la casse représentant le type d'évènement à écouter.
listenerUn objet qui reçoit la notification (un objet qui implémente l'interface Event) lorsqu'un évènement du type défini se produit. Cela peut être null, un objet avec une méthode handleEvent() ou une fonction JavaScript. Voir La fonction de rappel de l'écouteur d'évènements pour plus de détails.
options FacultatifObjet qui définit les caractéristiques de l'écouteur d'évènement. Les options disponibles sont :
capture FacultatifUn booléen indiquant que les évènements de ce type seront transmis à l'écouteur enregistré avant d'être transmis à tout autre EventTarget situé en dessous dans l'arbre DOM. Par défaut, false si non défini.
once FacultatifUn booléen indiquant que l'écouteur ne doit être invoqué qu'une seule fois après avoir été ajouté. Si true, l'écouteur sera automatiquement supprimé après son invocation. Par défaut, false si non défini.
passive FacultatifUn booléen qui, si true, indique que la fonction définie par listener n'appellera jamais preventDefault(). Si un écouteur passif appelle preventDefault(), rien ne se passe et un avertissement peut apparaître dans la console.
Si cette option n'est pas définie, elle vaut false — sauf dans les navigateurs autres que Safari, où elle vaut true pour les évènements wheel, mousewheel, touchstart et touchmove. Voir Utiliser les écouteurs passifs pour en savoir plus.
signal FacultatifUn objet AbortSignal. L'écouteur sera supprimé lorsque la méthode abort() du AbortController propriétaire du signal sera appelée. Si non défini, aucun AbortSignal n'est associé à l'écouteur.
useCapture FacultatifUn booléen indiquant si les évènements de ce type seront transmis à l'écouteur avant d'être transmis à tout autre EventTarget situé en dessous dans l'arbre DOM. Les évènements qui remontent (propagation) dans l'arbre ne déclencheront pas un écouteur défini en mode capture. La propagation et la capture sont deux modes de propagation des évènements dans des éléments imbriqués ayant chacun un gestionnaire pour cet évènement. Le mode de propagation détermine l'ordre dans lequel les éléments reçoivent l'évènement. Voir la spécification DOM (angl.) et l'ordre des évènements JavaScript (angl.) pour plus d'explications. Par défaut, useCapture vaut false si non défini.
Note : Pour les écouteurs attachés directement à la cible de l'évènement, l'évènement est dans la phase cible, et non dans les phases de capture ou de propagation. Les écouteurs en phase capture sont appelés avant ceux en phase cible ou de propagation.
Paramètre spécifique à Firefox (Gecko). Si true, l'écouteur reçoit les évènements synthétiques envoyés par le contenu web (par défaut false pour le chrome du navigateur et true pour les pages web classiques). Ce paramètre est utile pour le code des modules complémentaires et du navigateur lui-même.
Aucune (undefined).
L'écouteur d'évènement peut être défini soit comme une fonction de rappel, soit comme un objet dont la méthode handleEvent() sert de fonction de rappel.
La fonction de rappel elle-même accepte les mêmes paramètres et retourne la même chose que la méthode handleEvent() : elle prend en paramètre un objet basé sur Event décrivant l'évènement survenu, et ne retourne rien.
Par exemple, une fonction de rappel pouvant servir à la fois pour fullscreenchange et fullscreenerror pourrait ressembler à :
Par exemple, lorsque vous utilisez un gestionnaire générique pour un ensemble d'éléments similaires, la valeur de this à l'intérieur du gestionnaire sera une référence à l'élément. Elle sera identique à la valeur de la propriété currentTarget de l'objet évènement passé au gestionnaire.
Il est souvent utile de faire référence à l'élément sur lequel le gestionnaire d'évènement a été déclenché, par exemple lorsqu'on utilise un gestionnaire générique pour un ensemble d'éléments similaires.
Lorsque vous attachez une fonction de gestion à un élément avec addEventListener(), la valeur de this à l'intérieur du gestionnaire sera une référence à l'élément. Elle sera identique à la valeur de la propriété currentTarget de l'objet passé au gestionnaire d'évènement.
Rappel : les fonctions fléchées n'ont pas leur propre contexte this.
Si un gestionnaire d'évènement (par exemple onclick) est défini sur un élément dans le code HTML, le code JavaScript de l'attribut est en réalité encapsulé dans une fonction de gestion qui lie la valeur de this de la même façon que addEventListener() : une occurrence de this dans ce code fait référence à l'élément.
Notez que la valeur de this à l'intérieur d'une fonction appelée par le code de l'attribut suit les règles standards. Exemple :
La valeur de this dans logID() est une référence à l'objet global Window (ou undefined en mode strict).
La méthode Function.prototype.bind() permet de définir un contexte this fixe pour tous les appels ultérieurs — ce qui permet d'éviter les problèmes liés à l'ambiguïté du contexte this selon la façon dont la fonction est appelée. Notez cependant, qu'il faut conserver une référence à l'écouteur pour pouvoir le supprimer par la suite.
Voici un exemple avec et sans bind() :
Une autre solution consiste à utiliser une fonction spéciale nommée handleEvent() pour intercepter tous les évènements :
Une autre façon de gérer la référence à this est d'utiliser une fonction fléchée, qui n'a pas de contexte this propre.
Les écouteurs d'évènements n'acceptent qu'un seul argument : un objet Event ou une sous-classe de Event, qui est automatiquement transmis à l'écouteur. La valeur de retour est ignorée. Ainsi, pour transmettre des données à un écouteur ou en récupérer, il faut utiliser des fermetures (closures en anglais) plutôt que de passer des paramètres ou de s'appuyer sur la valeur de retour.
Les fonctions passées comme écouteurs d'évènements ont accès à toutes les variables déclarées dans les portées englobantes.
Voir le guide sur les fonctions pour plus d'informations sur la portée des fonctions.
Dans le premier cas ci-dessus, une nouvelle fonction de gestion (anonyme) est créée à chaque itération de la boucle. Dans le second cas, la même fonction déclarée précédemment est utilisée comme gestionnaire d'évènement, ce qui réduit la consommation mémoire car une seule fonction gestionnaire est créée. De plus, dans le premier cas, il n'est pas possible d'appeler removeEventListener() car aucune référence à la fonction anonyme n'est conservée (ou ici, aucune référence à l'une des multiples fonctions anonymes créées par la boucle). Dans le second cas, il est possible d'utiliser myElement.removeEventListener("click", traiterEvenement, false) car traiterEvenement est la référence de la fonction.
En réalité, concernant la consommation mémoire, le problème n'est pas tant l'absence de référence à la fonction, mais plutôt l'absence de référence statique à la fonction.
Si un évènement possède une action par défaut — par exemple, un évènement wheel qui fait défiler le conteneur — le navigateur ne peut généralement pas lancer l'action par défaut tant que l'écouteur d'évènement n'a pas terminé, car il ne sait pas à l'avance si l'écouteur va annuler l'action par défaut avec Event.preventDefault(). Si l'écouteur prend trop de temps à s'exécuter, cela peut provoquer un délai perceptible (appelé jank) avant que l'action par défaut ne soit exécutée.
En définissant l'option passive à true, un écouteur d'évènement déclare qu'il n'annulera pas l'action par défaut, ce qui permet au navigateur de lancer immédiatement l'action par défaut sans attendre la fin de l'écouteur. Si l'écouteur appelle malgré tout Event.preventDefault(), cela n'aura aucun effet.
La spécification de addEventListener() définit la valeur par défaut de l'option passive à false. Cependant, pour améliorer les performances de défilement dans du code existant, les navigateurs modernes ont changé la valeur par défaut de l'option passive à true pour les évènements wheel, mousewheel, touchstart et touchmove sur les nœuds de niveau document comme Window, Document et Document.body. Cela empêche l'écouteur d'évènement d'annuler l'évènement, et donc de bloquer l'affichage de la page pendant le défilement.
Ainsi, si vous souhaitez annuler ce comportement et garantir que l'option passive est false, vous devez explicitement définir cette option à false (plutôt que de compter sur la valeur par défaut).
Il n'est pas nécessaire de se soucier de la valeur de passive pour l'évènement scroll de base. Comme il ne peut pas être annulé, les écouteurs d'évènements ne peuvent pas bloquer l'affichage de la page dans ce cas.
Voir Améliorer les performances de défilement avec les écouteurs passifs pour un exemple illustrant l'effet des écouteurs passifs.
Cet exemple montre comment utiliser addEventListener() pour surveiller les clics de souris sur un élément.
Dans ce code, modifyText() est un écouteur pour les évènements click enregistré avec addEventListener(). Un clic n'importe où dans le tableau remonte jusqu'au gestionnaire et exécute modifyText().
Cet exemple montre comment ajouter un addEventListener() qui peut être annulé avec un AbortSignal.
Dans l'exemple ci-dessus, on modifie le code de l'exemple précédent de sorte qu'après que le contenu de la deuxième ligne passe à « trois », on appelle abort() depuis le AbortController passé à addEventListener(). Ainsi, la valeur reste « trois » indéfiniment car il n'y a plus de code à l'écoute de l'évènement click.
Ici, nous allons voir comment utiliser une fonction anonyme pour transmettre des paramètres à l'écouteur d'évènement.
Remarquez que l'écouteur est une fonction anonyme qui encapsule du code permettant ensuite de transmettre des paramètres à la fonction modifyText(), responsable de la gestion de l'évènement.
Cet exemple montre un écouteur d'évènement implémenté avec la notation fonction fléchée.
Notez que bien que les fonctions anonymes et les fonctions fléchées soient similaires, elles n'ont pas le même comportement pour this. Les fonctions anonymes (et toutes les fonctions traditionnelles JavaScript) créent leur propre liaison this, tandis que les fonctions fléchées héritent du this de la fonction englobante.
Cela signifie que les variables et constantes disponibles dans la fonction englobante sont aussi accessibles à l'écouteur d'évènement lorsqu'on utilise une fonction fléchée.
Click the outer, middle, inner containers respectively to see how the options work.
Vous pouvez définir plusieurs options dans le paramètre options. Dans l'exemple suivant, nous en définissons deux :
L'exemple suivant montre l'effet de l'option passive. Il inclut un <div> contenant du texte et une case à cocher.
Ce code ajoute un écouteur à l'évènement wheel du conteneur, qui fait défiler ce dernier par défaut. L'écouteur exécute une opération longue. Au départ, l'écouteur est ajouté avec l'option passive, et chaque fois que la case à cocher est modifiée, le code bascule la valeur de l'option passive.
L'effet est le suivant :
| DOM # ref-for-dom-eventtarget-addeventlistener③ |
Activez JavaScript pour afficher ce tableau de compatibilité des navigateurs.
Cette page a été modifiée le 17 mars 2026 par les contributeur·ice·s du MDN.
Votre modèle pour un internet meilleur.
Visitez la société mère à but non lucratif de Mozilla Corporation, la Fondation Mozilla.
Certaines parties de ce contenu sont protégées par le droit d'auteur ©1998—2026 des contributeurs individuels de mozilla.org. Contenu disponible sous une licence Creative Commons.