谷歌地图,只添加最后一个信息窗口

Google-map , Only the last infoWindow is added

本文关键字:信息 信息窗 窗口 最后一个 添加 谷歌地图      更新时间:2023-09-26

我有一个问题,要将infoWindow添加到FOR循环生成的标记中。我想为每个标记生成一个infoWindow。我只看到添加了最后一个infoWindow,即使我点击其他标记,这个infoWindow也显示在最后一个标记中,请参见屏幕截图

以下是我创建标记和信息窗口的循环:

  for (var i in data) {
            var rssi = data[i].rssi;
            var marker = new google.maps.Marker({
                map: map,
                position: new google.maps.LatLng(data[i].lat, data[i].lng),
                title: data[i].rssi,
                clickable: true
            });
                marker.info = new google.maps.InfoWindow({
                content: 'This is the marker:'+i
            });
            google.maps.event.addListener(marker, 'click', function() {
                marker.info.open(map, marker);
            });
            markers.push(marker);
        }

您需要找到当前标记,然后从中获取信息对象。试试这个:

用途:

 google.maps.event.addListener(marker, 'click', function() {
        this.info.open(map,this );
    });

  
  <script src="http://maps.google.com/maps/api/js?v=3.9&amp;sensor=false"></script>
<script>
var markers=[];
function plotmap(){
    var gm = google.maps;
    var map = new gm.Map(document.getElementById('map_canvas'), {
      mapTypeId: gm.MapTypeId.SATELLITE,
      center: new gm.LatLng(17.00,78.43), zoom: 10
    });
    
var data=[{'rssi':"fgfghfgh",'lat':"17.43",'lng':"78.43"},{'rssi':"new one",'lat':"17.49",'lng':"78.53"}];
for (var i in data) {
    var rssi = data[i].rssi;
    var marker = new google.maps.Marker({
        map: map,
        position: new google.maps.LatLng(data[i].lat, data[i].lng),
        title: data[i].rssi,
        clickable: true
    });
       marker.info = new google.maps.InfoWindow({
        content: 'This is the marker:'+i
    });
    google.maps.event.addListener(marker, 'click', function() {
        this.info.open(map,this );
    });
    markers.push(marker);
}
}
</script>
<div id="map_canvas" style="width:600px;height:500px;"></div>
<script>
plotmap();
</script>

我认为应该在给定的索引上打开infoWindow,否则它总是被引用到最后一个循环项。因此,在点击事件中,您应该在给定的i 中打开infoWIndow

google.maps.event.addListener(marker, 'click', function() {
    marker.info.open(map, marker[i]);
});

我想如果你点击一个不同的标记,那么你会有一个两个打开的infoWindow。如果你想一直打开一个,你可以存储currentOpen索引,并在打开新索引之前关闭它。

实际上问题出在中

marker.info.open(map, marker);

应该是

marker.info.open(map, this);