2013-09-04 18 views
9

में 'क्लिक' ईवेंट का प्रचार रोकें हमारी परियोजनाओं में से एक में हम Leaflet.markercluster प्लगइन के साथ Leaflet का उपयोग कर रहे हैं। Leaflet के स्रोतों के माध्यम से देखकर मैंने पाया कि यह _collapse() फ़ंक्शन को मानचित्र के click ईवेंट में जोड़ता है, इसलिए जब भी मैं मानचित्र पर क्लिक करता हूं तो यह पहले विस्तारित क्लस्टर का अनुबंध करता है।
अब, मैं इस व्यवहार को अक्षम करना चाहता हूं। यदि क्लस्टर का विस्तार किया गया है, तो मैं अपने सभी मार्करों को click ईवेंट पर अचयनित करना चाहता हूं (और क्लस्टर को अनुबंधित न करें)।पत्रक

scope.L.DomEvent.stopPropagation(e);
scope.L.DomEvent.preventDefault(e);
:

map.on('click', function(e) { 
    scope.deselectAllMarkers(); 
}); 

मैं आदेश click घटना के प्रसार को रोकने के लिए यह एक-पंक्ति कॉलबैक के अंत में निम्नलिखित लाइनों जोड़ने की कोशिश की: यहाँ मेरी कोड का टुकड़ा है scope.L.DomEvent.stop(e);
scope.L.DomEvent.stopPropagation(e.originalEvent);
scope.L.DomEvent.preventDefault(e.originalEvent);
scope.L.DomEvent.stop(e.originalEvent);

और उनमें से कोई भी काम नहीं करता है। Leaflet स्रोतों के अंदर छिपी हुई डिफ़ॉल्ट श्रोता जब भी मैं मानचित्र पर क्लिक करता हूं तो इसका आमंत्रण रखता है। क्या मैं कुछ भूल रहा हूँ?

+0

के लिए धन्यवाद आप अंत में इस के लिए एक समाधान मिला? –

उत्तर

0

अंत में मैं डिफ़ॉल्ट click हैंडलर जो _collapse() विधि लागू किया गया था के मैनुअल हटाने के द्वारा समस्या हल हो जाती गए हैं, जहाँ तक मुझे याद है के रूप में। गंदे, लेकिन यह चाल है।

0

आप इस event.stopPropagation()

map.on('click', function(e) { //don't forget to pass this 'e' event parameter 
    e.preventDefault(); 
    scope.deselectAllMarkers();   
    e.stopPropagation(); 
    return false;  
}); 
की तरह उपयोग

है कि इस सवाल का जवाब काफी देर हो चुकी है इस

1. event.stopPropagation()
2. event.preventDefault()
3. return false

+0

मैंने उन सभी की कोशिश की - कोई भाग्य नहीं। 'L.DomEvent.preventDefault (e)' और 'L.DomEvent.stopPropagation (e)' क्रमशः 'e.preventDefault() 'और' e.stopPropagation() 'का आह्वान करें। – aga

+0

क्या आपने अपना उत्तर देने की कोशिश की? –

15

मुझे पता है की किसी को भी प्रयास करें है , लेकिन अगर कोई समाधान में रूचि रखता है, तो यहां मैंने इसे हल किया है।

नीचे यह स्निपेट click ईवेंट में फ़ंक्शन को बाध्य करने का एक उदाहरण है।

map.on('click', doSomething); 

वास्तव में, leaflet's API और कुछ geekish डिबगिंग की जाँच के बाद, ऐसा लगता है कि घटना एक वस्तु, नहीं घटना ही देता है। घटना स्वयं लौटे ऑब्जेक्ट के भीतर एक क्षेत्र में लपेटा जाता है।

var doSomething = function(map) { 
    // stop propagation 
    map.originalEvent.preventDefault(); 
}; 

ऊपर टुकड़ा का उपयोग कर, घटना बुदबुदाती बंद कर दिया है, जो कुछ मैं चाहता था, और शायद तुम क्या चाहते थे।

1

आप किसी ईवेंट हैंडलर से ईवेंट प्रचार को ओवरराइड नहीं कर सकते हैं। पेज लोड होने के बाद आपको बिल्टिन लिफाफा सहायक का उपयोग करने की आवश्यकता है, इस तरह:

$('.element').each (i,el)-> 

    L.DomEvent.disableClickPropagation(el); 
संबंधित मुद्दे