谷歌地图infowindow不起作用

时间:2016-06-21 13:19:47

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

当页面已加载时,所有信息窗口都已打开。后来infowindow关闭我再也无法打开。我的错误在哪里?

    function init() {
       var center = {lat: <?=$lat?>, lng: <?=$lng?>};
       var map = new google.maps.Map(document.getElementById('map'), {
          zoom: 12,
          center: center
      });   
      <?php for($i=0; $i<5; $i++){ ?>
            var myLatLng = {lat:<?=$json[$i]['latitute']?>, lng:<?=$json[$i]['longitute']?>};                    
            var marker = new google.maps.Marker({
                position: myLatLng, 
                map: map
            });             
  var contentString = "<table'><tr>"+
    "<td><a href='<?=$json[$i]['image'];?></td>"+
    "</tr></table>";
   var infowindow = new google.maps.InfoWindow({
    content: contentString
    }); 
  google.maps.event.addListener(marker, 'click', function() {
   infowindow.open(map,this);
    });
  infowindow.close(map,marker);    
  var marker = new google.maps.Marker({
     map: map
   });
<?php } ?>
 }

1 个答案:

答案 0 :(得分:0)

在我看来,你正在覆盖你的变量。您的PHP循环对每个标记和infowindow使用相同的名称。也许在每个标识符之后添加?

var marker<?= $i;?> = ...
var infowindow<?= $i;?> = ...

我基本上使用5个标记和infowindows对你的循环进行了手动测试,并在javascript中对重复的变量进行了硬编码。在这种情况下,对我来说会发生什么,每个标记只会打开一个信息窗口。这是有道理的,因为你要覆盖标记变量和你正在绑定的事件。

无论如何,变量覆盖是一个你必须处理的问题,因为我确信这不是你想要实现的行为。