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


91

如何在Google Maps API v3中删除“ bounds_changed”事件侦听器?

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

1
我想我找到了您想要的。这是API文档中的第三个事件函数。
森花舞(Maiku Mori)2009年

1
我感到你很痛苦。您可能会认为此文档位于code.google.com/apis/maps/documentation/javascript/events.html上,但没有。Grrrr
Drew LeSueur 2010年

Answers:


152

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

如安德鲁所说,addListener返回一个句柄,以后可以使用它删除侦听器。这是因为单个事件可以有多个侦听器,并且要删除它们,您必须保存对每个附加侦听器的引用。

还有一个函数可以同时删除所有侦听器:

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

这是您可以阅读的Google Maps API参考


2
那么,这将仅删除bounds_changed事件吗?
mp_

与Andrews方法相比,使用此方法的利弊是什么?
mp_

这将从bounds_changed事件中删除所有侦听器。而安德鲁的方法删除了一个。如果您不想将句柄存储在某个地方,而只需要担心给定事件的1个侦听器,那么这就是方法。
森花舞(Maiku Mori)2009年

正如我所说的,事件可以有很多侦听器,但是似乎您在代码中只使用了1。如果您了解该概念,您将看到两种功能的不同用法。另请参阅我提供的链接,它对这两个功能都有很好的解释。
森花舞(Maiku Mori)2009年

2
弄清楚了。google.maps.event.clearListeners(map, 'idle')作品。但是map.clearListeners('idle')没有。该语法适用于API中的其他所有内容(.addListener等)。奇。
安迪·默瑟

93

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

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

google.maps.event.removeListener(listenerHandle);

因此,侦听器不再有静态变量了吗?
mp_

侦听器需要一一删除。您无法将它们全部与jQuery解除绑定。我知道,因为我也这么认为,对此也感到困惑。我最终弄清楚了,上面的伪代码大致说明了我是如何做到的。
安德鲁

1
德拉特!你一个更好的答案。
安德鲁

4
对我来说更好的答案是,仅删除我们创建的事件侦听器,它不会影响其他脚本
Matthieu Napoli

2
更好的答案有两个原因。仅,删除实际的侦听器。此外,也不会出现“您可以在API文档的注释中找到它。”
keithhackbarth 2012年


0

如果您无法以某种方式持有侦听器对象,则可以直接将侦听器删除为 google.maps.event.clearListeners(objectListened, 'event');

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.