Warum sagt FF, dass window.event nicht definiert ist? (Aufruf der function mit hinzugefügtem Ereignis-Listener)

Ich habe Probleme in diesem Teil:

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

Diese function heißt so:

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

Nur Firefox sagt, dass window.event nicht definiert ist …

Ich weiß nicht, was ich tun soll, damit es funktioniert. Es funktioniert sehr gut in Webkit-Browsern und Opera (ich kann es in MSIE nicht überprüfen und es interessiert mich nicht).

Warum passiert das?

Versuchen Sie, das Ereignis mithilfe des übergebenen Parameters abzurufen (in diesem Fall mit dem Namen e ). Ich testete dies und sowohl window.event als auch e wird in Chrome unterstützt.

versuche nach beiden zu suchen, je nachdem, was existiert

 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 ist kein Feature, es ist ein Bug!

Zitat MDN :

window.event ist eine proprietäre Microsoft Internet Explorer-Eigenschaft, die nur verfügbar ist, während ein DOM-Ereignishandler aufgerufen wird. Ihr Wert ist das Event-Objekt, das gerade behandelt wird.

Und am wichtigsten:

Nicht Teil einer Spezifikation.

window.event ist kein Standard, also erwarten Sie nicht, dass es von Browsern unterstützt wird.

Der erste Parameter der Callback-function in element.addEventListener() ist ein Event Objekt. Verwenden Sie es anstelle von window.event .

Weil window.event in Firefox nicht existiert. Das liegt daran, dass Browser unterschiedliche Ereignismodelle haben und Sie sich mit ihren Unterschieden auseinandersetzen müssen oder eine Bibliothek wie jQuery verwenden müssen, um nicht mit allen Unterschieden zwischen Browsern fertig zu werden. Willkommen im DOM.

Chrome hat es auch nicht nativ. Anstatt dass jeder Event-Trigger sein eigenes Event-Objekt übergibt, hat IE Eigenschaften in window.event abgelegt und diese übergeben. Dies funktioniert, da Sie immer nur mit einem Ereignis zu tun haben. Was jeder Browser haben sollte, ist window.Event, was der eigentliche Konstruktor für Event-Objekte ist. Wenn Sie “window.event” an einer anderen Stelle als IE8 und darunter sehen, versuchen Sie, eine Konsole auf einer leeren Registerkarte zu öffnen und sie dort zu protokollieren oder zu alarmieren. Es besteht die Möglichkeit, dass Sie etwas manuell auf der Seite hinzufügen, die Sie gerade betrachten.

Wenn Sie den Crossbrowser-Normalisierungscode für Event-Handler betrachten, sehen Sie oft:

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

Das ist Ereignis, das Code normalisiert, der ältere Versionen von IE behandelt. In modernen Browsern sollte e ein eigenes Objekt sein, das durch Argumente geleitet wird, nicht ein Verweis auf eine Eigenschaft von Fenster.