¿Cómo comprobar si existe o no un listener de eventos conectado dinámicamente?

Aquí está mi problema: ¿es posible de alguna manera para comprobar la existencia de escuchador de eventos adjunta dinámicamente? ¿O cómo puedo comprobar el estado de la propiedad "onclick" (?) en DOM? He buscado en internet al igual que en Stack Overflow una solución, pero no he tenido suerte. Aquí está mi html:

<a id="link1" onclick="linkclick(event)"> link 1 </a>
<a id="link2"> link 2 </a> <!-- without inline onclick handler -->

A continuación, en Javascript me adjunto dinámicamente creado oyente de eventos para el segundo enlace:

document.getElementById('link2').addEventListener('click', linkclick, false);

El código funciona bien, pero todos mis intentos de detectar ese listener adjunto fallan:

// test for #link2 - dynamically created eventlistener
alert(elem.onclick); // null
alert(elem.hasAttribute('onclick')); // false
alert(elem.click); // function click(){[native code]} // btw, what's this?

[jsFiddle está aquí](https://jsfiddle.net/qv0k7Lor/). Si hace clic en "Añadir onclick para 2" y luego "[enlace 2]", evento dispara bien, pero el "Enlace de prueba 2" siempre informa falso. ¿Alguien puede ayudar?

Solución

No hay forma de comprobar si existen o no escuchadores de eventos adjuntos dinámicamente.

La única forma de ver si un escuchador de eventos está adjunto es adjuntando escuchadores de eventos de esta forma:

elem.onclick = function () { console.log (1) }

A continuación, puede probar si un oyente de eventos se adjuntó a onclick devolviendo !!elem.onclick (o algo similar).

Comentarios (1)

Lo que yo haría es crear un booleano fuera de su función que comienza como FALSE y se establece en TRUE cuando se adjunta el evento. Esto serviría como una especie de bandera para usted antes de adjuntar el evento de nuevo. Aquí's un ejemplo de la idea.

// initial load
var attached = false;

// this will only execute code once
doSomething = function() {
  if (!attached) {
    attached = true;
    //code
  }
} 

//attach your function with change event
window.onload = function() {
    var txtbox = document.getElementById("textboxID");
    if(window.addEventListener){
        txtbox.addEventListener("change", doSomething, false);
    } else if(window.attachEvent){
        txtbox.attachEvent("onchange", doSomething);
    }
}
Comentarios (1)

He aquí un script que he utilizado para comprobar la existencia de un listener de eventos adjuntado dinámicamente. Usé jQuery para adjuntar un manejador de eventos a un elemento, y luego disparar ese evento (en este caso el evento 'click'). De esta manera puedo recuperar y capturar propiedades de eventos que sólo existirán si el manejador de eventos está adjunto.

var eventHandlerType;

$('#contentDiv').on('click', clickEventHandler).triggerHandler('click');

function clickEventHandler(e) {
    eventHandlerType = e.type;
}

if (eventHandlerType === 'click') {
    console.log('EventHandler "click" has been applied');
}
Comentarios (1)