Vue: event.target est nul dans Chrome sur img

Créé le 9 nov. 2017  ·  4Commentaires  ·  Source: vuejs/vue

Version

2.5.3

Lien de reproduction

https://jsbin.com/jafufah/1/edit?html ,js,console,output

Étapes à reproduire

Uniquement dans Chrome (61.0.3163) et parfois Safari (11.0.1).

  1. Ouvrir le lien vers jsbin
  2. Cliquez sur Exécuter avec JS
  3. Vérifiez que la console imprime d'abord une référence de event.target , puis null pour la même propriété.

Qu'est-ce qui est attendu ?

Dans Firefox, Edge et IE11, le event.target n'est jamais null .

Que se passe-t-il réellement ?

event.target est null si l'événement est stocké dans la variable jusqu'au prochain tick .


Je ne sais pas s'il s'agit d'un bogue dans Vue.js ou dans Chrome, mais j'ai pensé que plus d'yeux sur la question aideraient à clarifier.

J'ai vu cela pour la première fois dans une application nuxt.js, mais c'est facile à reproduire dans vue.js, donc je suppose que c'est soit dans vue core, soit dans Chrome (blink/webkit).

J'ai fait la même chose avec un gestionnaire de charge <object> et cela ne s'est jamais produit - c'est spécifique à l'élément <img> ou à la taille du fichier à charger.

Tous les 4 commentaires

ce n'est pas un bug : vous n'avez aucune garantie que l'événement soit valide dans un rappel asynchrone après son utilisation. Donc, fondamentalement, vous devez enregistrer tout ce dont vous avez besoin, dans votre cas, target , et l'utiliser directement à la place de la variable d'événement

@posva Avez-vous de la documentation pour cette déclaration ? Je ne pense pas que vous ayez tort, je n'ai jamais vu ou entendu ça auparavant.

je ne l'ai pas trouvé
Mais, vous pouvez le voir ici, sans Vue : https://jsbin.com/danuxohoga/1/edit?html ,js,console,output

Je cherchais un endroit contenant une documentation sur la durée de vie des événements DOM, mais je n'ai rien trouvé. Votre jsbin sera l'exemple de la couronne pour des milliers, à lier à partir de SO ;)

Sérieusement, la dernière fois que j'ai eu ce problème, c'était dans une machine virtuelle hybride appelée Titanium, où tous les éléments étaient mappés sur des contreparties Java ou Object-C et ceux-ci disparaîtraient si la machine virtuelle les jugeait inutilisés. Je n'aurais jamais pensé le voir dans un navigateur. Mais aujourd'hui était le jour ! :tada: 💩

Cette page vous a été utile?
0 / 5 - 0 notes