मैं USC मार्कर पर राइटक्लीक के साथ घटना के प्रचार को कैसे रोकूं?


9

मुझे कैटलॉग मार्करों में राइटक्लिक इवेंट नहीं मिला, इसलिए मैंने मूसडाउन इवेंट सुनना शुरू किया। इस घटना को हल करने वाली विधि में मैं जाँच करता हूँ

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

यह उस do_something में काम करता है () कहा जाता है, लेकिन घटना मानचित्र पर फैलती है और एक संदर्भ मेनू दिखाया जा रहा है। मैं नक्शे पर प्रचार करने के लिए घटना को कैसे रोकूं?

क्या यह सभी प्रमुख (यानी IE) ब्राउज़रों में काम करता है?

जवाबों:


4

मेरा पहला जवाब स्पष्ट रूप से काम नहीं कर रहा था और जैसा कि मैं अब उसी समस्या का सामना कर रहा हूं। यहाँ एक नया तरीका है:

यूएससी नामक एक घटना का समर्थन करता है contextmenu। जैसा कि USC इवेंट डॉक्यूमेंटेशन में पाया गया है

जब उपयोगकर्ता मानचित्र पर दायां माउस बटन दबाता है, तो डिफ़ॉल्ट ब्राउज़र संदर्भ मेनू को दिखाने से रोकता है कि क्या इस घटना के श्रोता हैं।

तो सैद्धांतिक रूप से कोड

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

बस ठीक काम करना चाहिएलेकिन जाहिरा तौर पर कार्यान्वयन प्रलेखन के पीछे रहता है। अब तक (USC 0.4.5) contextmenuघटना स्पष्ट रूप से मार्करों पर समर्थित नहीं है, हालांकि यह पॉलीलाइन ऑब्जेक्ट्स पर पूरी तरह से ठीक काम करता है।

निकट भविष्य में इस सुविधा को सक्षम करने के लिए पाइपलाइन में काम किया जा रहा है ( यहां और यहां चर्चा देखें )। इसलिए, मुझे लगता है कि हम बस आशा कर सकते हैं कि USC इस पर शीघ्रता से काम करता है और अगली रिलीज़ में ईवेंट को सक्षम बनाता है ...

संपादित करें: कार्यान्वयन के लिए इंतजार करने के बारे में मैंने जो कुछ भी कहा है उसे अस्वीकार करें । यदि आप नवीनतम विकास मास्टर शाखा डाउनलोड करते हैं और अपने आप को पत्रक बनाते हैं तो आपको contextmenuमार्करों पर घटनाओं के लिए पूर्ण समर्थन मिलता है । खुश कोडिंग।


4

IE और अन्य सभी ब्राउज़रों में डिफ़ॉल्ट व्यवहार को रोकना:

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

यह काम करने के लिए प्रतीत नहीं होता है। क्या आपने इसे USC में परीक्षण किया है? और क्या आपकी घटना एक लीफलेट ईवेंट या मूल DOMMouseEvent ब्राउज़र द्वारा निकाल दी गई है?
mrg

यह एक DOM इवेंट के लिए है। यदि कैटलॉग घटनाओं को लपेटता है, तो event.originalEvent का उपयोग करें।
tmcw

4

इस आंतरिक कार्य का प्रयास करें:

L.DomEvent.stopPropagation(event);

यह चाल करना चाहिए।

पी एस मैंने कभी नहीं पाया कि किसी भी प्रलेखन में, लेकिन यह एक पैच में इस्तेमाल देखा। अपने जोखिम पार इस्तेमाल करें। ;)

संपादित करें: मुझे यह आंतरिक फ़ंक्शन भी मिला

L.DomEvent.preventDefault(event);

जो बहुत कुछ वैसा ही लगता है event.preventDefault()जैसा कि jQuery में है।


मैंने आपके स्निपेट का उपयोग किया, लेकिन क्या होता है tmcw के समाधान के साथ भी ऐसा ही होता है। मैं अपने मार्कर पर राइट क्लिक करता हूं। यह सुनने की विधि में जाता है। वहां यह मार्कर को हटा देता है (जो कि मेरे लिए राइटक्लिक करना चाहिए) और फिर एक संदर्भ मेनू उस नक्शे पर खुलता है जहां मैंने क्लिक किया था जैसे कि पूरे मार्कर की बात नहीं हुई।
22

संयोग से मुझे यही मिला L.DomEvent.preventDefault(event);। जो मैंने देखा है (USC.js स्रोत को देखते हुए) यह preventDefault()jQuery द्वारा प्रदान किए गए समान होना चाहिए ... इसे आज़माएं! :)
fgysin

मैंने इसे आजमाया, लेकिन मानक संदर्भों मैं एफएफ में मिलता है जब मैं एक HTML पृष्ठ पर राइट क्लिक करता हूं तो पॉप अप होता रहता है।
mrg

2

घटना रोकने के लिए मुझे संयोगवश समाधान मिल गया।

उदाहरण के लिए, यदि कोई घटना इस तरह बनाई गई है - तो map.on("click", onMapClick);इस कोड के साथ घटना को रोका जा सकता है -map.off("click", onMapClick);

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.