2013-07-30 299 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); 
    }); 
}