Google Maps API v3 : 이벤트 리스너를 제거하는 방법?


91

Google Maps API v3 에서 'bounds_changed'이벤트 리스너를 제거하려면 어떻게해야 합니까?

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

1
당신이 찾고 있던 걸 찾은 것 같아요. API 문서의 세 번째 이벤트 함수였습니다.
Maiku Mori

1
나도 네 아픔을 느낀다. 이 문서가 code.google.com/apis/maps/documentation/javascript/events.html 에 있다고 생각할 수 있지만 그렇지 않습니다. Grrrr
Drew LeSueur

답변:


152

일반적으로 Google Maps API 문서에서 이러한 질문에 대한 답변을 찾을 수 있습니다.

Andrew가 말했듯이 addListener는 나중에 리스너를 제거하는 데 사용할 수있는 핸들을 반환합니다. 이는 단일 이벤트에 많은 리스너가있을 수 있고이를 제거하려면 연결된 각 리스너에 대한 참조를 저장해야하기 때문입니다.

동시에 모든 리스너를 제거하는 함수도 있습니다.

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

여기에 대해 읽을 수 있는 Google Maps API 참조 가 있습니다.


2
그러면 bounds_changed 이벤트 만 제거됩니까?
mp_ 2010 년

이 방법과 Andrews 방법의 장점 / 단점은 무엇입니까?
mp_ 2010 년

그러면 bounds_changed 이벤트에서 모든 리스너가 제거됩니다. Andrew의 방법은 하나를 제거합니다. 핸들을 어딘가에 저장하고 싶지 않고 주어진 이벤트에 대해 하나의 리스너 만 걱정하면됩니다.
Maiku Mori

내가 말했듯이 이벤트는 많은 리스너를 가질 수 있지만 코드에서 1을 사용하는 것 같습니다. 이 개념을 이해하면 두 기능에 대한 다른 용도를 볼 수 있습니다. 또한 내가 제공 한 링크를 참조하십시오. 두 기능에 대한 멋진 설명이 있습니다.
Maiku Mori

2
그것을 알아 냈습니다. google.maps.event.clearListeners(map, 'idle')공장. 하지만 map.clearListeners('idle')그렇지 않습니다. 이 구문은 API ( .addListener등)의 다른 모든 항목에서 작동합니다 . 이상한.
Andy Mercer

93

addListener는 나중에 removeListener에 전달할 수있는 핸들을 반환합니다.

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

google.maps.event.removeListener(listenerHandle);

그렇다면 더 이상 리스너를위한 정적 변수가 없습니까?
mp_ 2010 년

청취자는 하나씩 제거해야합니다. 모든 jQuery를 바인딩 해제 할 수는 없습니다. 나도 같은 생각을하고이 점에 대해 혼란스러워서 알아요. 나는 결국 그것을 해결했고 위의 의사 코드는 내가 어떻게했는지 대략적으로 보여줍니다.
Andrew

1
Drat! 당신은 이다 더 나은 대답.
Andrew

4
우리가 생성하고 다른 스크립트에 영향을주지 않습니다 리스너 이벤트 만 제거하는 것 나를 위해 더 나은 응답,
마티유 나폴리를

2
두 가지 이유로 더 나은 대답. 실제 리스너 만 제거합니다. . 또한, snarky이없는 "당신은 API 문서 '의견에서 찾을 수 있습니다
keithhackbarth

16

이것은 현재 릴리스에서 작동하는 것 같습니다.

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

그리고이 접근법의 좋은 점은 정의 된 메서드 가 없기 때문에 listenerHandler.remove()데이터 레이어 리스너에게도 작동 한다는 google.maps.data.addListener것입니다 google.maps.data.removeListener.
Christopher King


0

어떻게 든 리스너 객체를 보유 할 수 없다면 리스너를 직접 제거 할 수 있습니다. google.maps.event.clearListeners(objectListened, 'event');

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.