2012-11-26 11 views
7

मैं वर्तमान में एक ऐसे ऐप्लिकेशन को विकसित कर रहा हूं जो एक मानचित्र पर निर्भर करता है (Leaflet.js के माध्यम से डेटा को चिह्नित करें) और मानचित्र पर प्रदर्शित मार्कर।jQuery: Ctrl + A के प्रसार को कैसे रोकें?

मैंने उपयोगकर्ता के लिए चयन लागू किया है, इसलिए वह उन्हें चुनने के लिए मार्कर पर क्लिक कर सकते हैं और चयन करने के लिए मार्कर जोड़ने के लिए Ctrl-क्लिक कर सकते हैं। यह अच्छी तरह से काम करता है।

अब मुझे पसंद उपयोगकर्ता मार Ctrlएक द्वारा मानचित्र पर वर्तमान में सभी मार्करों चयन करने के लिए सक्षम होने के लिए के लिए चाहते हैं। कोड मैं इस इस तरह दिखता है प्राप्त करने के लिए उपयोग करें:

jQuery(document).keydown(function(e) { 
    if (e.ctrlKey) { 
    if (e.keyCode == 65 || e.keyCode == 97) { // 'A' or 'a' 
     e.stopPropagation(); 
     // SELECT ALL MARKERS HERE... 
    } 
    } 
}); 

यह जहाँ तक काम करता है एक साथ Ctrl और एक कुंजी दबाव पर ट्रिगर के रूप में संबंध है, के रूप में मैं चाहता हूँ चयन किया जाता है।

मेरे समस्या: हालांकि मैं घटना के प्रसार को रोकने के लिए लाइन, ब्राउज़र (क्रोम और ओपेरा पर परीक्षण) अभी भी हो रही मेरी मार्करों के लिए, हमेशा की तरह Ctrl + A-चयन करता है यानी अतिरिक्त जोड़ा मानचित्र पर मेरे कस्टम चयन कार्यान्वयन द्वारा चयनित, संपूर्ण वेब पेज चुना गया है। यह कष्टप्रद है: मानचित्र के बगल में इस पृष्ठ पर कोई टेक्स्ट नहीं है जिसे चुना जा सकता है, इसलिए वास्तव में कोई बात नहीं है - मैं Ctrl अक्षम करना चाहता हूं, जबकि मेरा नक्शा दिखाया गया है।

पीएस मैंने How can I disable Ctrl+A (select all) using jquery in a browser? में दिखाए गए कोड का उपयोग करने की कोशिश की लेकिन इसे काम करने में सक्षम नहीं था। क्या वास्तव में एपीआई में यह कार्यक्षमता है?

उत्तर

10

मान लीजिए कि आपकी गलती यह है कि आप e.stopPropagation() का उपयोग कर रहे हैं जो सिर्फ एक ईवेंट के आगे बबलिंग को रोकता है (क्योंकि आपका ईवेंट किसी दस्तावेज़ से जुड़ा हुआ है - यह बेकार है)। बजाय e.preventDefault() का प्रयास करें:

jQuery(document).keydown(function(e) { 
    if (e.ctrlKey) { 
    if (e.keyCode == 65 || e.keyCode == 97) { // 'A' or 'a' 
     e.preventDefault(); 
     // SELECT ALL MARKERS HERE... 
    } 
    } 
}); 

इस पर this demo

+0

आह, हमने इसे वही दूसरा पाया ... :) यहां आप अच्छे महोदय जाते हैं, एक स्वीकृति है। – fgysin

+0

क्रोम में मेरे लिए काम नहीं करता है –

0

आह मेरे लिए ठीक काम करता है, मैं चाल पाया:

e.preventDefault(); 

किसी भी डिफ़ॉल्ट कार्यवाहियां करने से ब्राउज़र को रोकता है। इस पर वर्णित मामले में चयन-सभी घटनाएं सामान्य रूप से Ctrl + A पर ट्रिगर होती हैं।

संबंधित मुद्दे