我已将所有标记存储在制造商数组中,当我点击标记时,我想从数组中检索索引。但是这不会返回正确的索引,而是返回最大索引。有什么建议吗?
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]);
}
答案 0 :(得分:1)
问题是变量i
没有像你期望的那样在闭包中被捕获。因此,所有侦听器都捕获相同的i
(最终增加到options.length)。您需要将标记/侦听器创建包装在自己的函数中。
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]);
}
你可以在for循环中使makeNewMarker
函数成为匿名函数,但这种方式似乎更具可读性。