251 votes

Supprimer tous les écouteurs d'événements d'un type spécifique

Je veux supprimer tous les écouteurs d'événements d'un type spécifique qui ont été ajoutés en utilisant addEventListener(). Toutes les ressources que je consulte disent que vous devez faire ceci :

elem.addEventListener('mousedown', specific_function);
elem.removeEventListener('mousedown', specific_function);

Mais je veux être en mesure de le supprimer sans savoir ce que c'est actuellement, comme ceci :

elem.addEventListener('mousedown', specific_function);
elem.removeEventListener('mousedown');

10voto

PaladinMattt Points 61

Je sais que c'est vieux, mais j'ai eu un problème similaire sans réponses réelles, où je voulais supprimer tous les écouteurs d'événements keydown du document. Au lieu de les supprimer, j'ai remplacé la fonction addEventListener pour les ignorer avant même qu'ils ne soient ajoutés, similaire à la réponse de Tom ci-dessus, en ajoutant ceci avant que d'autres scripts ne soient chargés :

    var current = document.addEventListener;
    document.addEventListener = function (type, listener) {
        if(type =="keydown")
        {
            //ne rien faire
        }
        else
        {
            var args = [];
            args[0] = type;
            args[1] = listener;
            current.apply(this, args);
        }
    };

6voto

Nazar Vynnytskyi Points 4147

Supprimez tous les écouteurs dans l'élément par une ligne de code js :

element.parentNode.innerHTML += '';

4voto

yves amsellem Points 3033

Dans le cas extrême où l'on ne sait pas quel rappel est attaché à un écouteur de fenêtre, un gestionnaire peut être enveloppé autour de addEventListener de la fenêtre et une variable peut stocker tous les écouteurs pour les supprimer correctement un par un à travers removeAllEventListener('scroll') par exemple.

var listeners = {};

var originalEventListener = window.addEventListener;
window.addEventListener = function(type, fn, options) {
    if (!listeners[type])
        listeners[type] = [];

    listeners[type].push(fn);
    return originalEventListener(type, fn, options);
}

var removeAllEventListener = function(type) {
    if (!listeners[type] || !listeners[type].length)
        return;

    for (let i = 0; i < listeners[type].length; i++)
        window.removeEventListener(type, listeners[type][i]);
}

2voto

McKabue Points 650

Vous ne pouvez pas supprimer un événement unique, mais tous à la fois? Il suffit de faire

document.body.innerHTML = document.body.innerHTML

2voto

Mike Sraj Points 21

Donc cette fonction se débarrasse de la plupart d'un type d'écouteur spécifié sur un élément :

function removeListenersFromElement(element, listenerType){
  const listeners = getEventListeners(element)[listenerType];
  let l = listeners.length;
  for(let i = l-1; i >=0; i--){
    removeEventListener(listenerType, listeners[i].listener);
  }
 }

Il y a eu quelques rares exceptions où l'un ne peut pas être supprimé pour une raison quelconque.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X