11484 sujets

JavaScript, DOM et API Web HTML5

Bonsoir
Comment tester l'existence d'un gestionnaire d'évènement?
Par exemple: document.body a-t-il un gestionnaire d'évènement sur "click"?
Merci de votre aide
Salut

Il n'y a aucun moyen en JS car getEventListeners a été mis à la poubelle par les navigateurs. Il faut utiliser les outils du développeur, touche F12.

Sur Chrome, dans le volet "Elements" vous cliquer sur l'élément du DOM à tester, puis à droite vous ouvrez le voler "EventListeners" qui donne la liste de tous les events visible par votre élément.

Si, par exemple, vous cherchez l'événement "click", il faut déplier (flèche) pour voir le nom de votre élément, par exemple "div#div1" (un tag DIV ayant l'ID div1)
Merci de la réponse.
Je suis effectivement un gros utilisateur de la touche F12, mais ce n'est pas la question que j'avais en tête.
Je ne cherche pas à debugger du code et à regarder à la main si l'évènement a bien été pris en compte à un certain moment, je cherche à faire ne sorte qu'un script puisse tester si un eventListener a été positionné sur un évènement sur une balise donnée, de façon à le positionner si ce n'est pas le cas, mais à ne pas le faire une nouvelle fois si c'est déjà fait.
Si on fait des addEventListener sans ce test, je crois comprendre que la fonction va être appelée plusieurs fois.
Une solution consisterait à faire

element.removeEventListener('click', ma_fonction, false); //supprimer le listener au cas où
element.addEventListener('click', ma_fonction, false);

N'y a-t-il rien de plus propre ?
Après quelques tests, j'ai l'impression que si on écrit:

element.addEventListener('click', ma_fonction, false);
element.addEventListener('click', ma_fonction, false);

la fonction n'est exécutée qu'une seule fois.

Pouvez vous confirmer?
Modérateur
Hé hée bon point

https://developer.mozilla.org/fr/docs/Web/API/EventTarget/addEventListener#.C3.89couteurs_multiples_et_identiques

a écrit :
Si plusieurs écouteurs (EventListeners) sont enregistrés sur la même cible (EventTarget) avec les mêmes paramètres, les instances en double sont ignorées. L'écouteur ne sera pas appelé plusieurs fois, et comme elles seront ignorées elles ne doivent pas être enlevées à l'aide de la méthode removeEventListener.


Donc oui, avec le même élément, le même évènement et la même instance de ma_fonction, c'est en effet ignoré.

Merci de me le faire découvrir Smiley langue
en jquery
$._data($(this).get(0), "events")

à conditionner dans ton cas.
te renvoie l’événement en question, click etc..
Modifié par JENCAL (19 Sep 2018 - 14:27)
kustolovic a écrit :
Merci de me le faire découvrir Smiley langue

et merci de le confirmer, je n'arrivais pas à trouver cet article!
JENCAL a écrit :
en jquery
$._data($(this).get(0), "events")

à conditionner dans ton cas.
te renvoie l’événement en question, click etc..

Ouais, pour se souvenir de ça... Smiley hum Smiley sweatdrop
C'est pour ça que je ne tiens pas à me lancer dans jQuery! Smiley cligne