variable script funcion bootstrap javascript event-listener

funcion - script javascript html



JavaScript: cómo comprobar si el evento ya se ha agregado (3)

De hecho, no es necesario verificar si se agregó un oyente a un destino:

Si varios EventListeners idénticos se registran en el mismo EventTarget con los mismos parámetros, las instancias duplicadas se descartan. No hacen que se llame dos veces al EventListener y, como los duplicados se descartan, no es necesario eliminarlos manualmente con el método removeEventListener.

Fuente: https://developer.mozilla.org/en-US/docs/Web/API/EventTarget.addEventListener#Multiple_identical_event_listeners

Quiero agregar un escucha exactamente una vez para beforeunload . Este es mi pseudocódigo:

if(window.hasEventListener(''beforeunload'') === false) { window.addEventListener(''beforeunload'', function() { ... }, false); }

Pero hasEventListener no existe obviamente. ¿Cómo puedo conseguir esto? Gracias.


En la herramienta Chrome Dev, puedes verificar todos los eventos adjuntos a un elemento (para la depuración) -

// print all events attached to document var eventObjectAttachedToDocument = getEventListeners(document); for (var event in eventObjectAttachedToDocument) { console.log(event); }


Usando jquery puedes usar data("events") en cualquier objeto (aquí en la ventana):

var hasbeforeunload = $(window).data("events") && $(window).data("events").[''beforeunload''];

Pero esto funciona solo para eventos jQuery agregados.

En un caso más general, simplemente debe almacenar la información que agrega un oyente en algún lugar:

var addedListeners = {}; function addWindowListenerIfNone(eventType, fun) { if (addedListeners[eventType]) return; addedListeners[eventType] = fun; window.addEventListener(eventType, fun); }

Creo que no hay una forma estándar en javascript para obtener los controladores de eventos existentes. En el mejor de los casos, podría sobrecargar la función addEventListener de Node para interceptar y almacenar a los oyentes, pero no lo recomiendo ...

EDITAR:

Desde jQuery 1.8, los datos de eventos están disponibles en $._data(element, "events") . El registro de cambios tiene una advertencia que debe tenerse en cuenta:

Tenga en cuenta que esta no es una interfaz pública compatible; las estructuras de datos reales pueden cambiar incompatiblemente de una versión a otra.