with significado multiple csma avoidance javascript firefox javascript-events addeventlistener

javascript - significado - ¿Por qué FF dice que window.event no está definido?(función de llamada con escucha de evento agregado)



csma/cd significado (4)

Tengo un problema en esta parte:

var ex = { exampl: function(){ var ref=window.event.target||window.event.srcElement; // here alert(ref.innerHTML); // (example) } }

Esta función se llama de esta manera:

document.body.childNodes[0].addEventListener(''mouseover'',ex.exampl,true);

Solo Firefox dice que window.event no está definido ...

No sé qué hacer, para que funcione. Funciona muy bien en navegadores web y opera (no puedo verificarlo en MSIE y no me importa).

¿Por que sucede?


Chrome tampoco lo tiene de forma nativa. En lugar de hacer que cada activador de evento pase su propio objeto de evento, IE soltó las propiedades en window.event y se las entregó. Esto funcionó ya que solo se trata de un evento a la vez. Lo que todo navegador debería tener es window.Event, que es el constructor real para los objetos de evento. Si está viendo ''window.event'' en cualquier lugar que no sea IE8 y abajo, intente abrir una consola en una pestaña en blanco e inicie sesión o lo advierta allí. Lo más probable es que lo esté agregando manualmente en la página que está viendo.

Si nos fijamos en el código de normalización crossbrowser para los controladores de eventos, a menudo verá:

if(!e){ e = window.event; }

Ese es el código de normalización de eventos que maneja versiones anteriores de IE. En los navegadores modernos, e debe ser su propio objeto pasado a través de argumentos, no una referencia a una propiedad de la ventana.


Porque window.event no existe en Firefox. Esto se debe a que el navegador tiene diferentes modelos de eventos y tendrá que lidiar con sus diferencias o utilizar una biblioteca como jQuery para no tener que lidiar con todas las diferencias entre los navegadores. Bienvenido al DOM.


intente obtener el evento utilizando el parámetro pasado (llamado e en este caso). window.event esto y tanto window.event como e se admiten en Chrome.

intente verificar ambos, cualquiera que exista

var ex = { exampl: function(e){ console.log(window.event); console.log(e); //check if we have "e" or "window.event" and use them as "evt" var evt = e || window.event } }


window.event no es una característica, ¡es un error!

Citando MDN :

window.event es una propiedad propietaria de Microsoft Internet Explorer que solo está disponible mientras se está llamando a un controlador de eventos DOM. Su valor es el objeto Evento que se está manejando actualmente.

Y más importante:

No forma parte de ninguna especificación.

window.event no es estándar, así que no esperes que ningún navegador lo admita.

El primer parámetro de la función de devolución de llamada en element.addEventListener() es un objeto de Event . Úselo en lugar de window.event .