API Google Maps v3: Comment supprimer un écouteur d'événement?

91

Comment supprimer l'écouteur d'événements "bounds_changed" dans l' API Google Maps v3 ?

google.maps.event.removeListener(_???_);    
mp_
la source
1
Je pense avoir trouvé ce que tu cherchais. C'était la troisième fonction d'événement dans les documents API.
Maiku Mori
1
Je ressens ta douleur. On pourrait penser que cette documentation serait sur code.google.com/apis/maps/documentation/javascript/events.html mais ce n'est pas le cas. Grrrr
Drew LeSueur

Réponses:

152

Vous pouvez généralement trouver des réponses à ces questions dans la documentation de l'API Google Maps.

Comme Andrew l'a dit, addListener renvoie un handle que vous pouvez utiliser plus tard pour supprimer l'écouteur. En effet, un seul événement peut avoir plusieurs écouteurs et pour les supprimer, vous devez enregistrer une référence à chacun des écouteurs attachés.

Il existe également une fonction qui supprime tous les auditeurs en même temps:

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

Voici la référence de l'API Google Maps où vous pouvez en savoir plus.

Maiku Mori
la source
2
Cela supprimera-t-il UNIQUEMENT l'événement bounds_changed?
mp_
Quels sont les avantages / inconvénients de l'utilisation de cette méthode par rapport à la méthode Andrews?
mp_
Cela supprime tous les écouteurs de l'événement bounds_changed. Alors que la méthode d'Andrew en supprime un. Si vous ne voulez pas stocker le handle quelque part et que vous n'avez à vous soucier que d'un seul écouteur pour un événement donné, c'est la voie à suivre.
Maiku Mori
Comme je l'ai dit, les événements peuvent avoir de nombreux écouteurs, mais il semble que vous n'utilisiez que 1 dans votre code. Si vous comprenez ce concept, vous verrez les différentes utilisations des deux fonctions. Voir également le lien que j'ai fourni, il contient de belles explications pour ces deux fonctions.
Maiku Mori
2
Deviner. google.maps.event.clearListeners(map, 'idle')travaux. Mais map.clearListeners('idle')non. Cette syntaxe fonctionne pour tout le reste de l'API ( .addListener, etc.). Impair.
Andy Mercer
93

addListener renvoie un handle que vous pouvez passer ultérieurement à removeListener:

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

google.maps.event.removeListener(listenerHandle);
Andrew
la source
Il n'y a donc plus de variables statiques pour les auditeurs?
mp_
Les auditeurs doivent être supprimés un par un. Vous ne pouvez pas tous les dissocier comme jQuery. Je le sais parce que je pensais la même chose et que j'étais confus sur ce point aussi. J'ai finalement travaillé et le pseudo-code ci-dessus illustre à peu près comment je l'ai fait.
Andrew
1
Drat! La vôtre est une meilleure réponse.
Andrew
4
Meilleure réponse pour moi, cela ne supprime que l'écouteur d'événements que nous avons créé et cela n'a aucun impact sur les autres scripts
Matthieu Napoli
2
Meilleure réponse pour deux raisons. Uniquement, supprime l'auditeur réel. Aussi, n'a pas le snarky "Vous pouvez le trouver dans le commentaire de la documentation de l'API.
keithhackbarth
16

Cela semble fonctionner dans la version actuelle.

var listenerHandle = google.maps.event.addListener(map, 'bounds_changed', function() {
    // Handler code.
});
listenerHandle.remove();
éther6
la source
Et la bonne chose à propos de cette approche est qu'elle listenerHandler.remove()fonctionne également pour les écouteurs de la couche de données - c'est google.maps.data.addListener-à- dire - car aucune google.maps.data.removeListenerméthode n'est définie.
Christopher King
Ouais .... développeurs.google.com
Pedro Ferreira
0

Si vous ne pouviez pas tenir l'objet écouteur d'une manière ou d'une autre, vous pourriez supprimer directement les écouteurs google.maps.event.clearListeners(objectListened, 'event');

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

Tarık Özgün Güner
la source