web-dev-qa-db-fra.com

Pourquoi FF dit que window.event est indéfini? (fonction d'appel avec écouteur d'événements ajouté)

J'ai un problème dans cette partie:

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

Cette fonction s'appelle de cette façon:

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

Seul Firefox dit que window.event n'est pas défini ... 

Je ne sais pas quoi faire pour que ça marche. Cela fonctionne très bien dans les navigateurs web et l'opéra (je ne peux pas le vérifier dans MSIE et je m'en fiche).

Pourquoi ça se passe?

29
anony_root

essayez d'obtenir l'événement en utilisant le paramètre passé (nommé e dans ce cas). J'ai testé cela et window.event et la e sont pris en charge en chrome.

essayez de vérifier les deux, selon ce qui existe

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    

  }
}
22
Joseph

window.event n'est pas une fonctionnalité, c'est un bug!

Citant MDN :

window.event est une propriété propriétaire de Microsoft Internet Explorer, disponible uniquement lors de l'appel d'un gestionnaire d'événements DOM. Sa valeur est l'objet Event en cours de traitement.

Et, surtout:

Ne fait partie d'aucune spécification.

window.event n'est pas standard, donc ne vous attendez pas à être pris en charge par les navigateurs aucun.

Le premier paramètre de la fonction de rappel dans element.addEventListener() est un objet Event. Utilisez-le au lieu de window.event.

16

Parce que window.event n'existe pas dans Firefox. En effet, les navigateurs ont différents modèles d’événements et vous devrez gérer leurs différences ou utiliser une bibliothèque telle que jQuery pour ne pas avoir à traiter toutes les différences entre les navigateurs. Bienvenue dans le DOM.

14
mpm

Chrome ne l'a pas nativement non plus. Plutôt que de laisser chaque déclencheur d'événement transmettre son propre objet événement, IE a supprimé les propriétés dans window.event et l'a transféré. Cela a fonctionné puisque vous n’avez jamais affaire qu’à un seul événement à la fois. Chaque navigateur devrait avoir window.Event, qui est le constructeur actuel des objets d’événement. Si vous voyez 'window.event' n'importe où sauf IE8 et inférieur, essayez d'ouvrir une console sur un onglet vide et de le consigner ou de l'alerte. Il est fort probable que quelque chose l'ajoute manuellement sur la page que vous consultez.

Si vous examinez le code de normalisation de crossbrowser pour les gestionnaires d'événements, vous verrez souvent:

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

C'est l'événement normalisant le code qui gère les anciennes versions d'IE. Dans les navigateurs modernes, e devrait être son propre objet transmis par des arguments, et non une référence à une propriété de window.

5
Erik Reppen

window.event sera disponible sur Firefox à partir de la version 63 (publication prévue fin octobre 2018). 

0
Matthieu Riegler

utilisez jQuery ..

let e = $.Event();

https://api.jquery.com/category/events/

0
Vampire