Google将错误标记显示在infowindow上

我有一段javascript代码,我在其中创建标记并将InfoWindows附加到它们,如下所示:

for (var i = 0; i < 8; i++) { var marker = new google.maps.Marker({ map: map, position: new google.maps.LatLng(lat[i], lng[i]), icon: '/static/images/iconsets/gmap/iconb' + (i+1) + '.png', }); var infowindow = new google.maps.InfoWindow({ content: 'test string' }); google.maps.event.addListener(marker, 'click', function() { infowindow.open(map,marker); }); } 

但是,当我单击其中一个标记时,infowindow始终只显示在一个标记上。 我究竟做错了什么?

您的问题有一个非常简单的解决方案,即将循环代码放入函数中。 您的问题是您覆盖变量marker ,以便在单击事件中访问它时,它使用该变量的最新版本,这是您添加的最后一个标记。

因此,当您将其放入函数中时,该变量位于单独的命名空间中,因此不会被覆盖。 换句话说,这应该工作:

 for (var i = 0; i < 8; i++) { createMarker(i); } function createMarker(i) { var marker = new google.maps.Marker({ map: map, position: new google.maps.LatLng(lat, lng), icon: '/static/images/iconsets/gmap/iconb' + (i+1) + '.png', }); var infowindow = new google.maps.InfoWindow({ content: 'test string' }); google.maps.event.addListener(marker, 'click', function() { infowindow.open(map,marker); }); } 
 google.maps.event.addListener(Marker, 'click', function() { InfoWindow.open(map, this); }); 

您应该使用而不是标记,因为标记将保留最后放置的标记的值。

 for (var i = 0; i < 8; i++) { var marker = new google.maps.Marker({ map: map, position: new google.maps.LatLng(lat[i], lng[i]), icon: '/static/images/iconsets/gmap/iconb' + (i+1) + '.png', content: 'test string' }); google.maps.event.addListener(marker, 'click', function() { new google.maps.InfoWindow({ content: this.content }).open(map, this); }); } 

试试这个:

  // Create a marker for each place. marker = new google.maps.Marker({ map: map, icon: icon, title: place.name, animation: google.maps.Animation.DROP, position: place.geometry.location }); var infowindow = new google.maps.InfoWindow({ content:'
' + place.name + '
' + 'Place ID: ' + place.place_id + '
' + place.formatted_address + '
' }); marker.addListener('click', function() { infowindow.open(map, this); });

谢谢