2013-04-05 3 views
2

Im boucle et en plaçant des marqueurs, mais quand je clique sur un marqueur, ils répondent tous à la même valeurgoogle maps plusieurs marqueurs clickevent

Voici mon code

for(a=0; a < prod.length; a++){  
    // we add marker to map 
    var myLatlng = new google.maps.LatLng(prod[a]['lat'],prod[a]['lon']); 
    var marker = new google.maps.Marker({ 
    position: myLatlng, 
    map: map, 
    title: prod[a]['name']+" \n"+prod[a]['description'], 
    icon: image 
    });   
    google.maps.event.addListener(marker, "click", function() { 
    show_details(a); 
    });  
} 

show_details fonction, un a toujours la même valeur

J'ai regardé les autres réponses ici mais cela n'a pas résolu mon problème.

Répondre

10

Problème de programmation/script asynchrone. La variable a passant, lorsque l'événement de clic s'exécute, ainsi, la valeur de ce qui est après la boucle for se termine. Vous devez créer une étendue de fonction interne et enregistrer la valeur a dans une variable, ce qui vit uniquement dans cette étendue. La solution:

(function(z){ 
    google.maps.event.addListener(marker, "click", function() { 
     show_details(z); 
    });  
})(a); 

Les a vie variables en dehors de la fonction de rappel trop. Donc, si vous modifiez la valeur de a (ou que la boucle for le modifie) et que le gestionnaire d'événements est appelé, il voit le a modifié.

Lien d'aide: http://robertnyman.com/2008/10/09/explaining-javascript-scope-and-closures/.

+0

merci, si logique mais je l'ai complètement négligé. – Grumpy

Questions connexes