无法在Google地图中为群集显示正确的信息窗口

时间:2011-11-29 23:37:10

标签: javascript google-maps google-maps-api-3 google-maps-markers

我正在使用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>

我确信这一点很简单,我一直在忽视,但我无法确定问题所在。

任何帮助都将不胜感激。

1 个答案:

答案 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);
}

我希望这会有所帮助。