Ya he visto estas preguntas:

sin embargo, ninguno de ellos respuestas cómo obtener una lista de los detectores de eventos conectados a un nodo a través de addEventListener, sin modificar el addEventListener prototipo antes de que los detectores de eventos se crean.

VisualEvent no muestra todas las detector de eventos (iphone específicos) y quiero hacer esto (un poco) de programación.

InformationsquelleAutor Tyilo | 2012-01-28

5 Comentarios

  1. 120

    Chrome DevTools, Safari Inspector y Firebug apoyo getEventListeners(nodo).

    Obtener los detectores de eventos conectados al nodo utilizando addEventListener

    • Hace este trabajo para orientationchange eventos?
    • Quiero señalar que getEventListeners método no es compatible con Firefox 35 versión.
    • Es posible que no funciona en Firefox, pero entonces de nuevo a los desarrolladores desarrollar en varios navegadores y Este seguro AYUDA si uno necesita modificar un sitio existente… UN MONTÓN!
  2. 59

    No se puede.

    La única manera de obtener una lista de todos los detectores de eventos conectados a un nodo es interceptar el oyente adjunto de la llamada.

    DOM4 addEventListener

    Dice

    Añadir un detector de eventos a la lista de asociados de detectores de eventos con el tipo establecido para el tipo, escucha conjunto de los oyentes, y la captura de capturar, a menos que ya hay un detector de eventos en la lista con el mismo tipo de oyente, y la captura.

    Lo que significa que un detector de eventos se añadió a la lista de detectores de eventos». Eso es todo. No hay ninguna noción de lo que esta lista debe de ser ni de cómo se debe acceder a ella.

    • Cualquier oportunidad de suministrar algún tipo de justificación o razonamiento de por qué se debe trabajar de esta manera? Claramente, el navegador sabe cuál de todos los oyentes.
    • ¿Cómo usted quiere que él para justificar esto? La API del DOM no proporciona ninguna forma de hacerlo y no hay formas no estándar para hacerlo en los navegadores actuales. Por qué este es el caso, realmente no lo sé. Parece razonable cosa que queramos hacer.
    • Yo he visto un par de hilos en todo mentira acerca de la adición de una API del DOM para esto.
    • la edición de ayuda. Viendo que no hay ninguna especificación para algo así como «getEventListeners», justifica por qué no hay tal cosa.
    • Más detalles sobre la especificación de la historia: stackoverflow.com/a/7814692/1026
  3. 22

    Ya que no hay modo nativo para hacer esto ,Aquí es menos intrusivo solución que he encontrado (no agregar cualquier ‘viejo’ prototipo métodos):

    var ListenerTracker=new function(){
    var is_active=false;
    //listener tracking datas
    var _elements_  =[];
    var _listeners_ =[];
    this.init=function(){
    if(!is_active){//avoid duplicate call
    intercep_events_listeners();
    }
    is_active=true;
    };
    //register individual element an returns its corresponding listeners
    var register_element=function(element){
    if(_elements_.indexOf(element)==-1){
    //NB : split by useCapture to make listener easier to find when removing
    var elt_listeners=[{/*useCapture=false*/},{/*useCapture=true*/}];
    _elements_.push(element);
    _listeners_.push(elt_listeners);
    }
    return _listeners_[_elements_.indexOf(element)];
    };
    var intercep_events_listeners = function(){
    //backup overrided methods
    var _super_={
    "addEventListener"      : HTMLElement.prototype.addEventListener,
    "removeEventListener"   : HTMLElement.prototype.removeEventListener
    };
    Element.prototype["addEventListener"]=function(type, listener, useCapture){
    var listeners=register_element(this);
    //add event before to avoid registering if an error is thrown
    _super_["addEventListener"].apply(this,arguments);
    //adapt to 'elt_listeners' index
    useCapture=useCapture?1:0;
    if(!listeners[useCapture][type])listeners[useCapture][type]=[];
    listeners[useCapture][type].push(listener);
    };
    Element.prototype["removeEventListener"]=function(type, listener, useCapture){
    var listeners=register_element(this);
    //add event before to avoid registering if an error is thrown
    _super_["removeEventListener"].apply(this,arguments);
    //adapt to 'elt_listeners' index
    useCapture=useCapture?1:0;
    if(!listeners[useCapture][type])return;
    var lid = listeners[useCapture][type].indexOf(listener);
    if(lid>-1)listeners[useCapture][type].splice(lid,1);
    };
    Element.prototype["getEventListeners"]=function(type){
    var listeners=register_element(this);
    //convert to listener datas list
    var result=[];
    for(var useCapture=0,list;list=listeners[useCapture];useCapture++){
    if(typeof(type)=="string"){//filtered by type
    if(list[type]){
    for(var id in list[type]){
    result.push({"type":type,"listener":list[type][id],"useCapture":!!useCapture});
    }
    }
    }else{//all
    for(var _type in list){
    for(var id in list[_type]){
    result.push({"type":_type,"listener":list[_type][id],"useCapture":!!useCapture});
    }
    }
    }
    }
    return result;
    };
    };
    }();
    ListenerTracker.init();
    • Usted también debe hacer es interceptar la ventana de detectores de eventos. Aparte de eso, este funciona muy bien!
  4. 2

    Usted puede obtener todos los eventos de jQuery usando $._data($(‘[selector]’)[0],’eventos’); cambio [selector] para lo que usted necesita.

    Hay un plugin que se reúnen todos los eventos conectados por jQuery llamado eventsReport.

    También puedo escribir mi propio plugin que haga esto con mejor formato.

    Pero de todos modos me parece que no podemos recopilar eventos añadido por el método addEventListener. Puede ser podemos envolver addEventListener llame para almacenar los eventos añadidos después de nuestra envoltura llamada.

    Parece la mejor manera de ver los eventos que se añade a un elemento con el dev tools.

    Pero no se ve delegada eventos. Así que no necesitamos jQuery eventsReport.

    ACTUALIZACIÓN: AHORA PODEMOS ver los eventos añadidos por el método addEventListener VER RESPUESTA CORRECTA PARA ESTA PREGUNTA.

    • Este es un interfaz obsoleta & puede desaparecer pronto, así que no dependen de eso.
    • Sí, pero el tiempo me respondió, no había tal capacidad en Dev tools. Así que, no había nada que elegir.
    • Es obsoleto @Rantiev, se puede eliminar esa respuesta?
  5. 2

    No puedo encontrar una manera de hacer esto con el código, pero en stock Firefox de 64, los eventos se muestran junto a cada una de las entidades HTML en las Herramientas de desarrollo Inspector como se señaló en MDN del Examinar Los Detectores De Eventos página y como se muestra en esta imagen:

    Obtener los detectores de eventos conectados al nodo utilizando addEventListener

Dejar respuesta

Please enter your comment!
Please enter your name here