更新时间:2023-01-17 14:24:52
您必须创建一个封闭:(var i = 0; i< layerCount; i ++){
for(var) j = 0; j
var latlng = new google.maps.LatLng(layerData [i] .data [j] .lat,layerData [i] .data [j] .lng);
var marker = new google.maps.Marker({map:map,position:latlng});
var infowindow = new google.maps.InfoWindow({content:text});
bindOpenWindow(infowindow,map,marker);
函数bindOpenWindow(infowindow,map,marker)
{
google.maps.event.addListener(marker,'click', function(){infowindow.open(map,marker);});
}
看看是否有帮助;)
for (var i=0; i<layerCount; i++){
for (var j=0; j<layerData[i].data.length; j++){
var text = layerData[i].data[j].text;
var latlng = new google.maps.LatLng(layerData[i].data[j].lat, layerData[i].data[j].lng);
var marker = new google.maps.Marker({map: map, position: latlng});
var infowindow = new google.maps.InfoWindow({content: text});
google.maps.event.addListener(marker, 'click', function() {infowindow.open(map,marker);});
}
}
The problem in the above code most likely is in the line starting with google.maps.event.addListener
. Whichever marker I click, I get a infowindow opening up for the last item in the data field of layerdata[i].data[j]
. Seems like I am calling by reference and not by value, so infowindow
and marker
for all listeners are the last items in the arrays.
But how can I solve this?
many thanks!
You have to create a closure:
for (var i=0; i<layerCount; i++){
for (var j=0; j<layerData[i].data.length; j++){
var text = layerData[i].data[j].text;
var latlng = new google.maps.LatLng(layerData[i].data[j].lat, layerData[i].data[j].lng);
var marker = new google.maps.Marker({map: map, position: latlng});
var infowindow = new google.maps.InfoWindow({content: text});
bindOpenWindow(infowindow, map, marker);
}
}
function bindOpenWindow(infowindow, map, marker)
{
google.maps.event.addListener(marker, 'click', function() {infowindow.open(map, marker);});
}
See if it helps ;)