On ne peut pas passer de l'événement à la méthode addEventListener: fermeture de problème
Cela me rend fou... j'ai une boucle qui ajoute un écouteur d'événement pour un tel objet. L'objet est, pour la clarté de l'exposé, un petit cercle, et je dois ajouter mouseover et mouseout événements pour chacun des 10 cercles.
Mon premier problème est celui de la fermeture standard-portée chose parce que tous les auditeurs sont ajoutés dans la même boucle, ils voient la même invalide la valeur de la variable de boucle. Je peux résoudre ce problème, je pense, mais le deuxième problème est que j'ai passer "événement" pour les auditeurs, et je ne peux pas trouver un moyen de résoudre ces deux problèmes en même temps.
J'ai essayé différentes versions de ce:
for(month = 0; month < nMonths; month++) {
...
shape.addEventListener(
"mouseover",
(function(event, index) { popup_on(event, foo, index); })(event, month),
false);
group.appendChild(shape);
}
Cette version me donne de l'événement n'est pas défini". popup_on
est le véritable gestionnaire, et de doit obtenir event
et la valeur actuelle de month
. Aucune idée de comment je dois faire? Merci.
OriginalL'auteur EML | 2012-01-03
Vous devez vous connecter pour publier un commentaire.
L'événement sera transmis à votre fonction automatiquement—il suffit de faire le premier argument de la fonction, vous pouvez passer à
addEventListener
. Aussi, la valeur false est la valeur par défaut pour la saisie de paramètres.Aussi, êtes-vous ok avec
foo
être fermés au cours de votre événement de rappel? Si non, vous pourriez faire la même chose avec elleEt si toutes ces variables locales sont plus ennuyeux, vous pouvez les paramètres, éventuellement, de faire des choses un peu plus ordonné
Je pense que le code que j'ai mis ci-dessus fonctionne très bien. Chaque fois que la forme est re-créé, il suffit de mettre le code ci-dessus pour ajouter l'écouteur d'événement pour ce cas particulier.
Brillant qu'il a fait. Merci.
OriginalL'auteur Adam Rackis