【问题标题】:How can I remove an InfoWindow when the Marker is removed?删除标记后如何删除信息窗口?
【发布时间】:2012-05-08 22:41:31
【问题描述】:

我有一个 Google 地图 div 和复选框列表,用于过滤地图上的标记。

但是,如果我单击一个标记,打开一个InfoWindow,然后单击一个复选框以删除该类型的标记,InfoWindow 不会从地图中删除。

删除标记后,我调用此代码,但 InfoWindow 保持不变:

try {
    if( infowindow ) {
          infowindow.close();
    }
}
catch(err) { }

【问题讨论】:

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


    【解决方案1】:

    我建议您通过添加类似于以下示例的代码来更改创建 Marker 单击侦听器以打开您的信息窗口的代码:

    google.maps.event.addListener( marker, "click", function() {
        var bubble = new google.maps.InfoWindow({
            content: buildBubbleContent( param1, param2 )
        });
        bubble.open( map, marker );
        //pretty standard stuff to here, but the next line is new (for me):
        google.maps.event.addListenerOnce( marker, "visible_changed", function() {
            bubble.close();
        });
    });
    

    正如所讨论的那样:How do I clean up an InfoWindow when the associated Marker is hidden?:

    【讨论】:

      【解决方案2】:
      function closeInfoWindow() {
              if (infoWindow !== null) {
                  google.maps.event.clearInstanceListeners(infoWindow);  // just in case handlers continue to stick around
                  infoWindow.close();
                  infoWindow = null;
              }
          }
      

      【讨论】:

      • 浏览器出现错误:未捕获的 ReferenceError: infoWindow is not defined
      • 尝试在 infowindow 的答案中更改 infoWindow 并确保您的 infowindow var 是全局变量。
      • 您没有使用与它完全相同的代码.. 从错误中很明显它无法找到 infoWindow,因此要么将其作为参数传递,要么维护一个全局变量。现在,由于您有多个 InfoWindows,因此将其作为参数传递可能是有意义的
      • 您的代码可能由于严格的comaprision 而无法工作。 null === undefined 是假的,但 null == undefined 是真的。建议使用最后一个与未定义/空值进行比较。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-04-21
      • 2016-10-20
      • 2016-11-10
      • 2018-07-27
      • 2011-08-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多