我正在尝试添加一些标记,它们的位置(纬度和经度)是从数据库中获取的,我可以将它们添加到地图中,但是
google.maps.event.addListener(marker, 'click', function() {
infowindow.open(map,marker);
});方法仅将事件侦听器添加到最后一个标记(数据库中的最后一个城市)...
如何为每个标记单独添加Listner?
这是我的完整代码..
=============================================================================
result contains List<City>
function OnSuccess(result) {
if (result) {
for (var i = 0; i < result.length; i++) {
alert(result[i].lat);
var myCenter= new google.maps.LatLng(result[i].lat,result[i].log);
var marker=new google.maps.Marker({
position:myCenter});
var infowindow = new google.maps.InfoWindow({
content: result[i].desc
});
google.maps.event.addListener(marker, 'click', function() {
infowindow.open(map,marker);
});
marker.setMap(map);
}
}
}发布于 2013-07-30 16:02:02
你需要一个闭合。您正在做的是为您的每个标记重新定义单击处理函数。单击所有标记时,将执行此行:
infowindow.open(map,marker);使用当时的'infowindow','map‘和’map‘的值。因为标记是在循环中创建的,所以它将始终引用最后一个标记。
此外,infowindow每次都会被重新定义。因此,内容将始终是您最后一个结果的内容。
这是我通常的做法。
// create this outside of your loop
var infowindow = new google.maps.InfoWindow({
content: ""
});
for (var i = 0; i < result.length; i++) {
var myCenter= new google.maps.LatLng(result[i].lat,result[i].log);
var marker=new google.maps.Marker({
position: myCenter,
map: map
});
bindInfoWindow(marker, map, infowindow, result[i].desc);
}
function bindInfoWindow(marker, map, infowindow, html) {
google.maps.event.addListener(marker, 'click', function() {
infowindow.setContent(html);
infowindow.open(map, marker);
});
}https://stackoverflow.com/questions/17938466
复制相似问题