Google Maps API v3: Cách xóa Trình xử lý sự kiện?


91

Làm cách nào để xóa trình xử lý Sự kiện 'bounds_changed' trong API Google Maps v3 ?

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

1
Tôi nghĩ rằng tôi đã tìm thấy những gì bạn đang tìm kiếm. Đây là hàm sự kiện thứ 3 trong tài liệu API.
Maiku Mori

1
Tôi cảm nhận được nỗi đau của bạn. Bạn sẽ nghĩ rằng tài liệu này sẽ có trên code.google.com/apis/maps/documentation/javascript/events.html nhưng không phải. Grrrr
Drew LeSueur

Câu trả lời:


152

Thông thường, bạn có thể tìm thấy câu trả lời cho những câu hỏi như vậy trong tài liệu API của Google Maps.

Như Andrew đã nói, addListener trả về một xử lý mà bạn có thể sử dụng sau này để xóa trình nghe. Đó là bởi vì một sự kiện đơn lẻ có thể có nhiều người nghe và để xóa chúng, bạn phải lưu một tham chiếu đến từng người nghe đính kèm.

Ngoài ra còn có một chức năng loại bỏ tất cả người nghe cùng một lúc:

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

Đây là tài liệu tham khảo API Google Maps mà bạn có thể đọc về nó.


2
Vì vậy, điều này sẽ CHỈ xóa sự kiện bounds_changed?
mp_

Ưu điểm của việc sử dụng phương pháp này so với phương pháp Andrews là gì?
mp_

Điều này sẽ xóa tất cả người nghe khỏi sự kiện bounds_changed. Trong khi phương pháp của Andrew loại bỏ một. Nếu bạn không muốn lưu trữ tay cầm ở đâu đó và bạn chỉ phải lo lắng về 1 người nghe cho sự kiện nhất định thì đây là cách để thực hiện.
Maiku Mori

Như tôi đã nói các sự kiện có thể có nhiều người nghe, nhưng có vẻ như bạn chỉ đang sử dụng 1 trong mã của mình. Nếu bạn hiểu khái niệm đó, bạn sẽ thấy các cách sử dụng khác nhau cho cả hai chức năng. Cũng xem liên kết tôi đã cung cấp, nó có giải thích tốt cho cả hai chức năng đó.
Maiku Mori

2
Tìm ra. google.maps.event.clearListeners(map, 'idle')làm. Nhưng map.clearListeners('idle')không. Cú pháp đó hoạt động cho mọi thứ khác trong API ( .addListener, v.v.). Kỳ quặc.
Andy Mercer

93

addListener trả về một xử lý mà sau này bạn có thể chuyển đến removeListener:

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

google.maps.event.removeListener(listenerHandle);

Vì vậy, không còn biến tĩnh cho người nghe?
mp_

Người nghe cần được loại bỏ từng người một. Bạn không thể hủy liên kết tất cả chúng với jQuery. Tôi biết vì tôi cũng nghĩ như vậy và cũng bối rối về điểm này. Cuối cùng tôi đã tìm ra nó và đoạn mã giả ở trên minh họa đại khái cách tôi đã làm điều đó.
Andrew

1
Drat! Của bạn một câu trả lời tốt hơn.
Andrew

4
Câu trả lời tốt hơn cho tôi, đó là chỉ xóa trình nghe sự kiện mà chúng tôi đã tạo và nó không ảnh hưởng đến các tập lệnh khác
Matthieu Napoli

2
Câu trả lời tốt hơn vì hai lý do. Chỉ, loại bỏ người nghe thực tế. Ngoài ra, không có nhân vật quái gở "Bạn có thể tìm thấy nó trong các tài liệu API nhận xét.
keithhackbarth

16

Điều này dường như hoạt động trong bản phát hành hiện tại.

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

Và điều tốt đẹp về cách tiếp cận này là nó cũng listenerHandler.remove()hoạt động cho các trình nghe lớp dữ liệu - tức là google.maps.data.addListener- vì KHÔNG có google.maps.data.removeListenerphương pháp nào được định nghĩa.
Christopher King


0

Nếu bạn không thể giữ đối tượng người nghe bằng cách nào đó, bạn có thể xóa (các) người nghe trực tiếp bằng google.maps.event.clearListeners(objectListened, 'event');

Ví dụ: google.maps.event.clearListeners(map, 'bounds_changed');

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.