Le code est très straight-forward comme suit:Comportement du programme d'écoute d'événements de l'API Google Maps - prévu?
var populateGoogleMap = function (points) {
for (i = points.length - 1; i >= 0; i--) {
var marker = new google.maps.Marker({
map: map,
draggable: true,
animation: google.maps.Animation.DROP,
position: new google.maps.LatLng(point.target.x, point.target.y)
});
google.maps.event.addListener(marker, 'click', function (e) {
toggleBounce(marker);
});
nodes[i].marker = marker;
}
};
Il se trouve que le en toggleBounce(marker)
est toujours le dernier qui est créé. J'ai considéré ce problème un peu, et j'ai trouvé une solution en modifiant la fonction. J'ai enlevé la boucle dans la fonction, et utilise une boucle ailleurs pour appeler cette fonction plusieurs fois. Donc, maintenant, il devient for (i = 0; i < points.length; i++) { populateGoogleMap(point); }
.
Est-ce que ce comportement est prévu par l'API Google Maps? Je pense que cela peut être déroutant pour beaucoup de gens, puisque la variable devrait se référer à celle dans le contexte actuel.
cela a beaucoup de sens, mais comment puis-je résoudre ce problème si je veux garder la boucle? – Michiel
Vous pouvez conserver votre boucle pour l'ajout de marqueurs, mais vous devez déplacer l'écouteur d'événement en dehors de cette boucle (dans une autre fonction wrapper). Vous appelez ensuite cette fonction wrapper depuis l'intérieur de votre boucle. – duncan
merci Duncan, c'était le tour! +1 – Michiel