2011-07-15 79 views
0

我從數據庫拉我的latlng對象,當我通過JavaScript中的查詢循環的標記都填充就好,但是當我點擊一個他們所有在不同標記上打開相同的infoWindow對象。我認爲這是某種命名問題,但我很難找出原因,因爲這一切看起來都適合我。以下代碼位於創建循環的cfoutput標籤中。谷歌地圖infoWindow在JavaScript中(通過循環創建多個infoWindows)

var latlng_#get_latlng.recordcount# = new google.maps.LatLng(#get_latlng.mlat#,#get_latlng.mlong#); 
var marker_#get_latlng.recordcount# = new google.maps.Marker({ 
    position: latlng_#get_latlng.recordcount#, 
    map: map, 
    title: "test" 
}); 

var contentString_#get_latlng.recordcount# = "test" + #get_latlng.recordcount#; 

var infowindow_#get_latlng.recordcount# = new google.maps.InfoWindow({ 
    content: contentString_#get_latlng.recordcount# 
}); 

google.maps.event.addListener(marker_#get_latlng.recordcount#, 'click', function() { 
    infowindow_#get_latlng.recordcount#.open(map,marker_#get_latlng.recordcount#); 
}); 

回答

1

而不是生產這麼多的多餘的JS,我會創建一個函數,添加標記。

function addMarker(lat, lng, title, content) { 
    var latlng = new google.maps.LatLng(lat, lng); 
    var marker = new google.maps.Marker({ 
     position: latlng, 
     map: map, 
     title: title 
    }); 
    var infowindow = new google.maps.InfoWindow({ content: content }); 
    google.maps.event.addListener(marker, "click", function() { 
     infowindow.open(map, marker); 
    }); 
} 

然後在您的循環:

addMarker(#get_latlng.mlat#,#get_latlng.mlong#,"#get_latlng.title#","#get_latlng.content#"); 
1

'recordcount'是否返回結果集中值的數量?在這種情況下,你所有的變量名都是一樣的。因此,它們都將被正確渲染,但會不斷覆蓋JavaScript變量引用:並且將根據您所做的最後一個創建一個infoWindow。

你需要一個更加獨特的名字:我想你想要一個基於結果集索引的索引,但是簡單的計數就可以。

+0

它是當前記錄號,我相信,因爲所有的標誌仍然表現出了正確只是沒有信息窗口 – rajh2504

+0

他們會出現......他們是都只是引用你聲明的最後一個infoWindow:因爲它們都是相同的名稱並相互覆蓋。 –