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 数据的标记?