2011-10-26 4 views
0

Je crée une carte dynamique à l'aide de l'API de Google. J'essaie d'obtenir la carte d'appliquer dynamiquement les cases d'information pour chaque marqueur .. et je ne peux pas le comprendre:Problème Google Maps dynamique simple

http://www.zephyrusdevelopment.com/clients/electrotrack/map2.html

+0

Alors qu'il est bon de c'est généralement mieux poster un lien vers un exemple, * aussi * extraits de poste de le code pertinent, afin que nous puissions voir ce que vous avez essayé. – nrabinowitz

+0

Très bien, je le ferai la prochaine fois. Je l'ai compris, cependant. – user981408

Répondre

0

On dirait que vous tomber dans la boucle, plus classique erreur -fermeture, qui sous une forme simplifiée ressemble à ceci:

while(i<=(a_l-1)) { 
    // snip 
    var marker = new google.maps.Marker({ 
     // snip 
    }); 
    google.maps.event.addListener(marker, 'click', function() { 
     infowindow.open(map,marker); 
    }); 
    // snip 
} 

le problème est que, en raison de la fermeture façon de travailler en Javascript, la fonction de gestionnaire conservera une référence permanente à la variable , même après avoir affecté à un nouvel objet. Résultat final: tous vos gestionnaires référencent le dernier objet affecté à .

Il y a plusieurs façons de résoudre ce problème; J'utilise généralement une fonction distincte pour affecter le gestionnaire de clic, qui capture l'objet correct dans le champ d'application du gestionnaire:

function addClickHandler(marker) { 
    google.maps.event.addListener(marker, 'click', function() { 
     infowindow.open(map,marker); 
    }); 
} 

while(i<=(a_l-1)) { 
    var marker = new google.maps.Marker({ 
     // snip 
    }); 
    addClickHandler(marker); 
} 
+0

Oui, ce que j'ai fait, si vous regardez, a été mis le gestionnaire entier en dehors de la boucle. Merci quand même pour vôtre aide! :) – user981408

+0

Si c'était la bonne réponse, vous pouvez la marquer correctement en cliquant sur la coche à côté - merci! – nrabinowitz