2011-07-06 2 views
0

J'ai stocké tous les marqueurs dans un tableau makers, et quand je clique sur le marqueur, je voudrais récupérer l'index du tableau. Cependant, cela ne me renvoie pas l'index correct, mais retourne l'index max. Toute suggestion?Google map API2 addListener

for(var i = 0; i<options.length; i++){ 
marker[i] = new GMarker(new GLatLng(options[i].latitude, options[i].longitude), markerIcon); 
//addListener(i, options[i].name); 
GEvent.addListener(marker[i],"click", function(e) { 
alert(i); 
}); 
map.addOverlay(marker[i]); 
} 

Répondre

1

Le problème est que la i variable est pas capturé dans une fermeture, comme on peut s'y attendre. Ainsi, tous les écouteurs capturent le même i (qui est finalement incrémenté à options.length). Vous devez envelopper la création de marqueur/écouteur dans sa propre fonction.

var makeNewMarker = function(i) { 
    var marker = new GMarker(
     new GLatLng(options[i].latitude, options[i].longitude), 
     markerIcon); 
    GEvent.addListener(marker[i],"click", function(e) { 
    alert(i); 
    }); 
}; 
for (var i = 0; i < options.length; ++i) { 
    marker[i] = makeNewMarker(i); 
    map.addOverlay(marker[i]); 
} 

Vous pouvez faire la fonction makeNewMarker une fonction anonyme dans la boucle for, mais cette façon semble plus lisible.

+0

Merci, Dave! Sauvé ma journée. –