2012-05-01 29 views
8

, मैं श्री Resig द्वारा jQuery Hotkeys plugin उपयोग कर रहा हूँ पर कब्जा और ctrl+o आदि की तरह शॉर्टकट को संभालने के लिए ...jQuery हॉटकी ... इसलिए वैश्विक नहीं असल में

ठीक है, शायद मैं अवधारणा uderstand नहीं है, लेकिन मैं था इस धारणा के तहत कि ctrl+o दस्तावेज के अंदर कहीं भी ट्रिगर दस्तावेज़ हॉटकी हैंडलर द्वारा कब्जा कर लिया जाएगा।

उदाहरण के लिए, निम्न कोड सामान्य रूप में काम करता है ...

jQuery(document).bind('keydown', 'ctrl+o', fn); 

हालांकि, यह विफल रहता है उपयोगकर्ता हॉटकी से चलाता है जब एक इनपुट बॉक्स के अंदर बुरी तरह यदि।

यह केवल काम करता है अगर मैं निम्न कार्य करें:

jQuery('body, input').bind('keydown', 'ctrl+o', fn); 

कौन सा मेरे स्वास्थ्य के लिए बहुत बुरा है, क्योंकि यह बहुत हैंडलर हर बार एक नया इनपुट बॉक्स डोम में जोड़ा जाता है बंधन शामिल है। इससे भी बदतर, मुझे नहीं पता कि CodeMirror जैसे जटिल विजेट्स के मामले में क्या बाध्य होना है।

डुनो अगर मेरी समस्या समझ में आती है, तो शायद मैं गलत दृष्टिकोण का उपयोग कर रहा हूं? मैं भी निम्न वस्तुओं के लिए बाध्य करने की कोशिश की, लेकिन यह काम नहीं किया: window, document, body, div[contains the whole page]

एनबी: आप try it out here कर सकते हैं।

+0

शायद आप यहां 'ऑन()' का उपयोग कर सकते हैं? तो यह कभी भी जोड़े गए हर इनपुट के साथ काम करेगा। या क्या मैं कुछ न कुछ भूल रहा हूं? –

+0

@ टोपरर मैं * सभी * वर्तमान * इनपुट, लेकिन किसी भी * भविष्य * के साथ बाध्य नहीं करना चाहता हूं। इस तरह की घटनाओं को जोड़ने की सुंदरता यह है कि आपको अपने ईवेंट हैंडलिंग फ़ंक्शंस को रखने के लिए वैश्विक चर की आवश्यकता नहीं है, आप आवश्यकता होने पर इसे केवल एक बार करें। – Christian

+0

लेकिन यहां बिंदु घटनाओं को जोड़ने के बारे में नहीं है, बल्कि हॉटकी कार्यक्षमता इसे स्वयं ही करनी चाहिए। मेरा मतलब है, यह एक हॉटकी का मुद्दा है .... नेटबीन्स संपादक में 'ctrl + s' दबाकर नेटबीन्स प्रोजेक्ट लिस्टिंग (उदाहरण के रूप में) के अंदर ऐसा करने का एक ही प्रभाव उत्पन्न होता है। – Christian

उत्तर

6

यह वास्तव में प्लगइन की कार्यक्षमता का इरादा है:

// Don't fire in text-accepting inputs that we didn't directly bind to 
if (this !== event.target && (/textarea|select/i.test(event.target.nodeName) || 
    event.target.type === "text")) { 
    return; 
} 
+0

ठीक है, ईमानदार होने के लिए, मुझे नहीं पता कि कोड को बदले बिना मेरी समस्या को कैसे ठीक किया जाए :( – Christian

+0

मुझे लगता है कि मैं सुविधा को अक्षम करने के विकल्प पर जा सकता हूं ... फिर Resig के लिए एक पैच सबमिट करें ... – Christian

+0

हाँ, मुझे प्लगइन को किसी भी तरह से संशोधित किए बिना इसके चारों ओर एक रास्ता नहीं दिख रहा है। –

1

हाँ, JqueryHotkeys बुरी तरह विफल रही है उपयोगकर्ता जब एक इनपुट बॉक्स के अंदर हॉटकी से चलाता है।

वैकल्पिक रूप से, जब मैंने ब्राउज़ किया तो मुझे shortcut.js मिला, जो Jquery-Hotkeys के समान कार्यक्षमता प्रदान करता है।

महत्वपूर्ण इसमें इनपुट बॉक्स के अंदर "उपयोगकर्ता परिभाषित शॉर्टकट फ़ंक्शन" को सक्षम या अक्षम करने का विकल्प भी है।