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(_???_);    

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.


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);

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();

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


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');

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.