ฉันจะหยุดการเผยแพร่กิจกรรมด้วยคลิกขวาบนเครื่องหมายของแผ่นพับได้อย่างไร


9

ฉันไม่พบเหตุการณ์คลิกขวาในเครื่องหมายของแผ่นพับดังนั้นฉันจึงเริ่มฟังเหตุการณ์ที่เกิดขึ้น ในวิธีที่แก้ไขเหตุการณ์นี้ฉันจะตรวจสอบ

if (event.originalEvent.button == 2) {
    do_something();
    // now i want to stop propagation of the rightclick
    return;
}

สิ่งนี้ทำงานในสิ่งที่เรียกว่า do_something () แต่เหตุการณ์แพร่กระจายไปยังแผนที่และมีการแสดงเมนูบริบท ฉันจะป้องกันไม่ให้เหตุการณ์เผยแพร่สู่แผนที่ได้อย่างไร

ใช้ได้กับเบราว์เซอร์หลัก (เช่น IE) ทั้งหมดหรือไม่

คำตอบ:


4

เห็นได้ชัดว่าคำตอบแรกของฉันไม่ทำงานและขณะนี้ฉันกำลังเผชิญปัญหาเดียวกัน นี่คือวิธีการใหม่:

contextmenuใบปลิวสนับสนุนเหตุการณ์ที่เรียกว่า เท่าที่พบในเอกสารแผ่นปลิวเหตุการณ์ที่นี่

ยิงเมื่อผู้ใช้กดปุ่มเมาส์ขวาบนแผนที่ป้องกันไม่ให้เมนูบริบทเบราว์เซอร์เริ่มต้นแสดงขึ้นหากมีผู้ฟังในเหตุการณ์นี้

ดังนั้นในทางทฤษฎีรหัส

marker.on('contextmenu', function(e) {
  this.openPopup();
});

ควรทำงานได้ดี แต่เห็นได้ชัดว่าการใช้งานล่าช้าหลังเอกสาร ณ ตอนนี้ (Leaflet 0.4.5) contextmenuเหตุการณ์ยังไม่รองรับเครื่องหมายแม้ว่ามันจะทำงานได้อย่างสมบูรณ์แบบบนวัตถุโพลีไลน์

ดูเหมือนว่าจะมีการทำงานในไปป์ไลน์เพื่อเปิดใช้งานคุณลักษณะนี้ในอนาคตอันใกล้ (ดูการสนทนาที่นี่และที่นี่ ) ดังนั้นฉันคิดว่าเราแค่หวังว่า Leaflet จะสามารถทำงานได้อย่างรวดเร็วและเปิดใช้งานกิจกรรมในรุ่นถัดไป ...

แก้ไข: ไม่สนใจสิ่งที่ฉันพูดเกี่ยวกับการรอการติดตั้ง หากคุณดาวน์โหลดสาขาหลักของการพัฒนาล่าสุดและสร้างแผ่นพับด้วยตัวคุณเองคุณจะได้รับการสนับสนุนอย่างเต็มที่สำหรับcontextmenuเหตุการณ์บนเครื่องหมาย การเข้ารหัสที่มีความสุข


4

การป้องกันพฤติกรรมเริ่มต้นใน IE และเบราว์เซอร์อื่น ๆ ทั้งหมด:

event.returnValue = false;
if (event.preventDefault) event.preventDefault();

ดูเหมือนจะไม่ทำงาน คุณได้ทดสอบสิ่งนี้ในแผ่นพับหรือไม่? และเหตุการณ์ของคุณคือเหตุการณ์ใบปลิวหรือเบราว์เซอร์ DOMMouseEvent เดิมเริ่มทำงานโดยเบราว์เซอร์หรือไม่
mrg

นี่สำหรับเหตุการณ์ DOM หาก Leaflet ล้อมรอบเหตุการณ์ให้ใช้ event.originalEvent
tmcw

4

ลองใช้ฟังก์ชันภายในนี้:

L.DomEvent.stopPropagation(event);

มันควรจะทำเคล็ดลับ

PS ฉันไม่เคยพบว่าในเอกสารใด ๆ แต่เห็นว่ามันใช้ในแพทช์ ใช้ความเสี่ยงของคุณเอง ;)

แก้ไข:ฉันยังพบฟังก์ชันภายในนี้

L.DomEvent.preventDefault(event);

ซึ่งดูเหมือนจะมากเหมือนกันevent.preventDefault()ซึ่งอยู่ใน jQuery


ฉันใช้ข้อมูลโค้ดของคุณ แต่สิ่งที่เกิดขึ้นเหมือนกับโซลูชันของ tmcw ฉันคลิกขวาที่เครื่องหมายของฉัน มันไปที่วิธีการฟัง มีมันลบเครื่องหมาย (นั่นคือสิ่งที่คลิกขวาควรทำเพื่อฉัน) จากนั้นเมนูบริบทจะเปิดขึ้นบนแผนที่ที่ฉันคลิกราวกับว่าสิ่งที่เครื่องหมายทั้งหมดไม่ได้เกิดขึ้น
mrg

L.DomEvent.preventDefault(event);โดยโอกาสฉันเพิ่งค้นพบนี้ จากสิ่งที่ฉันเห็น (ดูที่ Leaflet.js source) สิ่งนี้ควรจะคล้ายกับpreventDefault()jQuery ที่จัดหาให้โดย ... ลองใช้ดู! :)
fgysin คืนสถานะโมนิก้า

ฉันลองมัน แต่บริบทมาตรฐานฉันได้รับใน FF เมื่อฉันคลิกขวาที่หน้า html จะปรากฏขึ้นเรื่อย ๆ
mrg

2

ฉันได้รับการแก้ไขโดยบังเอิญสำหรับการหยุดเหตุการณ์

ตัวอย่างเช่นหากมีการสร้างกิจกรรมเช่นนี้ - map.on("click", onMapClick);เหตุการณ์สามารถหยุดได้ด้วยรหัสนี้ -map.off("click", onMapClick);

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