Google Maps API v3: จะลบ Event Listener ได้อย่างไร


91

ฉันจะลบตัวฟังเหตุการณ์ 'bounds_changed' ในGoogle Maps API v3 ได้อย่างไร

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

1
ฉันคิดว่าฉันพบสิ่งที่คุณกำลังมองหาแล้ว เป็นฟังก์ชันเหตุการณ์ที่ 3 ในเอกสาร API
Maiku Mori

1
ฉันรู้สึกถึงความเจ็บปวดของคุณ. คุณคิดว่าเอกสารนี้จะอยู่ในcode.google.com/apis/maps/documentation/javascript/events.htmlแต่ไม่ใช่ Grrrr
Drew LeSueur

คำตอบ:


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_

อะไรคือข้อดีของการใช้วิธีนี้กับวิธีแอนดรู
mp_

สิ่งนี้จะลบผู้ฟังทั้งหมดออกจากเหตุการณ์ bounds_changed ในขณะที่วิธีการของ Andrew จะลบออกไป หากคุณไม่ต้องการเก็บที่จับไว้ที่ไหนสักแห่งและคุณต้องกังวลเกี่ยวกับผู้ฟัง 1 คนสำหรับเหตุการณ์ที่กำหนดนี่คือวิธีที่จะไป
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_

ผู้ฟังจะต้องถูกลบออกทีละคน คุณไม่สามารถเลิกผูกมันได้ทั้งหมด ala jQuery ฉันรู้เพราะฉันคิดเหมือนกันและก็สับสนในประเด็นนี้เช่นกัน ในที่สุดฉันก็ทำมันออกมาได้และโค้ดหลอกด้านบนก็แสดงให้เห็นอย่างคร่าวๆว่าฉันทำได้อย่างไร
Andrew

1
ดรัท! ขอเป็นคำตอบที่ดีกว่า
Andrew

4
คำตอบที่ดีกว่าสำหรับฉันนั่นคือการลบเฉพาะผู้ฟังเหตุการณ์ที่เราสร้างขึ้นและไม่ส่งผลกระทบต่อสคริปต์อื่น ๆ
Matthieu Napoli

2
ตอบดีกว่าด้วยเหตุผลสองประการ เท่านั้นลบฟังจริง นอกจากนี้ยังไม่มีความน่ากลัว "คุณสามารถค้นหาได้ในความคิดเห็นของเอกสาร API
keithhackbarth

17

ดูเหมือนว่าจะใช้ได้ในรุ่นปัจจุบัน

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

หากคุณไม่สามารถถือวัตถุ Listener ได้คุณสามารถลบ Listener ได้โดยตรงด้วย google.maps.event.clearListeners(objectListened, 'event');

เช่น: google.maps.event.clearListeners(map, 'bounds_changed');

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.