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.
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.
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.