2013-07-30 271 views
0

我是想添加标记,其位置(纬度和经度)是从数据库中提取,我的数量“M能够将它们添加到地图,谷歌地图API标记

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

方法添加事件只收听最后一个标记(oe在数据库中的最后一个城市)......

如何为每个标记单独添加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); 

        } 

       } 
      } 

回答

0

你需要关闭。你正在做的是重新定义你的每一个标记的点击处理函数。所有标记,点击后,将执行这一行:

infowindow.open(map,marker); 

使用任何“信息窗口”,“地图”和“标志”的值是在那个时候。因为标记是在循环中创建的,所以这将始终指最后一个标记。

另外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); 
    }); 
}