Google Maps API v3:如何删除事件监听器?

Posted

技术标签:

【中文标题】Google Maps API v3:如何删除事件监听器?【英文标题】:Google Maps API v3: How to remove an Event Listener? 【发布时间】:2010-12-05 08:59:38 【问题描述】:

如何删除 Google Maps API v3 中的 'bounds_changed' 事件侦听器?

google.maps.event.removeListener(_???_);    

【问题讨论】:

我想我找到了你要找的东西。这是 API 文档中的第三个事件函数。 我感受到了你的痛苦。您可能会认为该文档会在 code.google.com/apis/maps/documentation/javascript/events.html 上,但事实并非如此。呸呸呸 【参考方案1】:

如果你不能以某种方式持有监听器对象,你可以直接删除监听器google.maps.event.clearListeners(objectListened, 'event');

例如:google.maps.event.clearListeners(map, 'bounds_changed');

【讨论】:

【参考方案2】:

这似乎在当前版本中有效。

var listenerHandle = google.maps.event.addListener(map, 'bounds_changed', function() 
    // Handler code.
);
listenerHandle.remove();

【讨论】:

这种方法的好处是listenerHandler.remove() 也适用于数据层侦听器——即google.maps.data.addListener——因为没有定义google.maps.data.removeListener 方法。 是的....developers.google.com/maps/documentation/javascript/…【参考方案3】:

通常您可以在 Google Maps API 文档中找到此类问题的答案。

正如 Andrew 所说,addListener 返回一个句柄,您可以稍后使用它来删除侦听器。这是因为一个事件可以有多个监听器,要移除它们,您必须保存对每个附加监听器的引用。

还有一个函数可以同时移除所有的监听器:

clearListeners(instance:Object, eventName:string);
//In your case:
google.maps.event.clearListeners(map, 'bounds_changed');

Here's the Google Maps API reference 在那里你可以阅读到它。

【讨论】:

那么这只会删除 bounds_changed 事件吗? 使用这种方法与安德鲁斯方法的优缺点是什么? 这会从 bounds_changed 事件中删除所有侦听器。而安德鲁的方法删除了一个。如果您不想将句柄存储在某处,并且您只需要担心给定事件的 1 个侦听器,那么这就是要走的路。 正如我所说的事件可以有很多听众,但看起来你只是在代码中使用 1 。如果您了解该概念,您将看到这两种功能的不同用途。另请参阅我提供的链接,它对这两个功能都有很好的解释。 想通了。 google.maps.event.clearListeners(map, 'idle') 有效。但是map.clearListeners('idle') 没有。该语法适用于 API 中的所有其他内容(.addListener 等)。奇数。【参考方案4】:

addListener 返回一个句柄,您可以稍后将其传递给 removeListener:

var listenerHandle = google.maps.event.addListener(map, 'bounds_changed', function() 

google.maps.event.removeListener(listenerHandle);

【讨论】:

所以监听器不再有静态变量了? 监听器需要一一移除。你不能将它们全部解除绑定 ala jQuery。我知道,因为我也有同样的想法,并且在这一点上也感到困惑。我最终解决了这个问题,上面的伪代码大致说明了我是如何做到的。 该死!你的更好的答案。 对我来说更好的答案,那就是只删除我们创建的事件侦听器,它不会影响其他脚本 更好的答案有两个原因。仅,删除实际的侦听器。此外,没有尖刻的“您可以在 API 文档的评论中找到它。

以上是关于Google Maps API v3:如何删除事件监听器?的主要内容,如果未能解决你的问题,请参考以下文章

Google Maps Api v3 - 如何删除集群图标?

如何从 Google Maps v3 API 中删除带有 mysql 数据的标记?

如何在 Google Maps V3 上触发标记的 onclick 事件?

在 Google Maps API v3 中删除标记

Google Maps API v3 - 如何清除叠加层?

Google Maps API v3 删除所有折线