我正在使用the MarkerCluster library for Google Maps v3,并且在让信息窗口正常运行标记时遇到问题。
正在发生的事情是标记被放置在正确的位置,但是当您点击它们时,无论点击哪个标记,弹出的最后一个标记的信息窗口都会弹出。
这是JavaScript:
<script type="text/javascript">
function initialize() {
var center = new google.maps.LatLng(37.4419, -122.1419);
var myOptions = {
zoom: 3,
center: new google.maps.LatLng(46.90, -121.00),
mapTypeControl: true,
mapTypeControlOptions: {style: google.maps.MapTypeControlStyle.DROPDOWN_MENU},
navigationControl: true,
mapTypeId: google.maps.MapTypeId.ROADMAP
}
map = new google.maps.Map(document.getElementById("map"), myOptions);
var infowindow = new google.maps.InfoWindow({
//size: new google.maps.Size(150,150)
maxWidth: 500,
});
var markers = [];
for (var i = 0; i < businesses.length; i++) {
var latLng = new google.maps.LatLng(businesses[i].latitude, businesses[i].longitude);
var contentString = businesses[i].latitude;
var marker = new google.maps.Marker({
position: latLng,
map: map,
zIndex: Math.round(latLng.lat()*-100000)<<5
});
google.maps.event.addListener(marker, 'click', function() {
infowindow.setContent(contentString);
infowindow.open(map,marker);
});
markers.push(marker);
}
var markerCluster = new MarkerClusterer(map, markers);
}
google.maps.event.addDomListener(window, 'load', initialize);
</script>
我确信这一点很简单,我一直在忽视,但我无法确定问题所在。
任何帮助都将不胜感激。
答案 0 :(得分:4)
我有类似的问题,我在添加事件监听器时使用闭包修复了这个问题:
for (var i = 0; i < businesses.length; i++) {
var latLng = new google.maps.LatLng(businesses[i].latitude, businesses[i].longitude);
var contentString = businesses[i].latitude.toString();
var marker = new google.maps.Marker({
position: latLng,
map: map,
zIndex: Math.round(latLng.lat()*-100000)<<5
});
google.maps.event.addListener(marker, 'click', (function(marker, contentString) {
return function() {
infowindow.setContent(contentString);
infowindow.open(map,marker);
};
})(marker, contentString));
markers.push(marker);
}
我希望这会有所帮助。