【问题标题】:infowindow closing and var (google maps api v3)信息窗口关闭和 var(谷歌地图 api v3)
【发布时间】:2023-03-10 10:21:01
【问题描述】:

在谷歌地图 api v.3 中打开新窗口时,我无法关闭信息窗口。

var infowindow;
function addMarker(id, location) {
contentString = 'some content';

var marker = new google.maps.Marker({
  position: location,
  map: map
});

var infowindow = new google.maps.InfoWindow({
    content: contentString,
    maxWidth: 200
});

google.maps.event.addListener(marker, 'click', function() {
  if (infowindow) infowindow.close();  
  infowindow.open(map, marker); 
});

markersArray[id] = marker;
}

问题在于,在上面的代码中,旧信息窗口在单击新信息窗口时不会关闭,除非我从 var infowindow = new google.maps.InfoWindow({ 但是所有的信息窗口都有相同的内容......

有什么帮助吗? 谢谢。

【问题讨论】:

  • 你在同一个作用域中声明了两个同名的变量?
  • 是的,这是真的。我有两次 var 信息窗口。但是当我删除 _var infowindow; _ 并没有真正改变任何东西......

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


【解决方案1】:

使用一个全局变量来包含一个指向最后打开的标记的指针,当打开一个新的时,关闭前一个。像这样

//var infowindow; // <-- removed; should not be global
var openedInfoWindow = null;  // <-- added this here; make sure it's global

function addMarker(id, location) {
    contentString = 'some content';

    var marker = new google.maps.Marker({
        position: location,
        map: map
    });

    var infowindow = new google.maps.InfoWindow({
        content: contentString,
        maxWidth: 200
    });

    google.maps.event.addListener(marker, 'click', function() {
      if (openedInfoWindow != null) openedInfoWindow.close();  // <-- changed this
      infowindow.open(map, marker); 
      // added next 4 lines
      openedInfoWindow = infowindow;
      google.maps.event.addListener(infowindow, 'closeclick', function() {
          openedInfoWindow = null;
      });
    });

    markersArray[id] = marker;
}

【讨论】:

  • 有效!太感谢了。我花了很多时间试图解决它。
  • 我不知道这与我编写的代码有何不同,但这有效,而我的却没有:赞成提交谢谢
猜你喜欢
  • 2013-10-04
  • 2013-12-16
  • 2013-05-18
  • 1970-01-01
  • 1970-01-01
  • 2013-05-16
  • 1970-01-01
  • 2011-02-27
  • 2016-07-10
相关资源
最近更新 更多