谷歌地图,只添加了最后一个infoWindow

时间:2015-11-10 11:20:03

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

我有一个问题是将infoWindow添加到FOR循环生成的标记中。 我想为每个标记生成一个infoWindow。 我看到只添加了最后一个infoWindow,即使我把它放到其他标记上,这个infoWindow会显示在最后一个标记see screenshot

这是我创建标记和infowindows的循环:

  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);

        }

3 个答案:

答案 0 :(得分:0)

我认为你应该在给定的索引上打开i,否则它总是被引用到最后一个循环项。因此,在点击事件中,您应该在给定的google.maps.event.addListener(marker, 'click', function() { marker.info.open(map, marker[i]); });

中打开infoWIndow
infoWindow

我猜如果您点击其他标记,那么您将有两个开放currentOpen。如果您希望始终打开一个,您可以存储$conditions = $rule->conditions(); foreach ($conditions as $condition) { $rule_sku_ids = $condition->condition->sku_id; } 索引并在打开新索引之前将其关闭。

答案 1 :(得分:0)

实际上问题在于

marker.info.open(map, marker);

应该是

marker.info.open(map, this);

答案 2 :(得分:0)

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

使用:

 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>
&#13;
&#13;
&#13;