2010-05-21 12 views
45

कुंजीपटल में पृष्ठ पर एक इनपुट तत्व डाले बिना कुंजी प्रेस, उदाहरण के लिए, Ctrl + Z कैप्चर कैसे करें? ऐसा लगता है कि आईई में, कीप्रेस और कीप इवेंट केवल इनपुट तत्वों (इनपुट बॉक्स, टेक्स्टरी, इत्यादि)पृष्ठ पर इनपुट तत्व डाले बिना कुंजी दबाएं?

+0

आप की जरूरत नहीं होनी चाहिए। – muhmuhten

+6

क्यों नहीं ......? –

+4

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

उत्तर

31

jQuery भी एक उत्कृष्ट कार्यान्वयन उपयोग करने के लिए अविश्वसनीय रूप से आसान है कि है। यहाँ कैसे आप ब्राउज़रों में इस कार्यक्षमता को लागू कर सकते हैं:

$(document).keypress(function(e){ 
    var checkWebkitandIE=(e.which==26 ? 1 : 0); 
    var checkMoz=(e.which==122 && e.ctrlKey ? 1 : 0); 

    if (checkWebkitandIE || checkMoz) $("body").append("<p>ctrl+z detected!</p>"); 
}); 

IE7 में परीक्षण किया, फायरफॉक्स 3.6.3 & क्रोम 4.1.249.1064

करने का एक और तरीका है इस keydown घटना का उपयोग करें और घटना को ट्रैक करने के लिए है। कुंजी कोड।

$(document).keydown(function(e){ 
if (e.keyCode==90 && e.ctrlKey) 
    $("body").append("<p>ctrl+z detected!</p>"); 
}); 
+0

ई को नहीं पता था जो कि कीस्ट्रोक के साथ-साथ माउस क्लिक भी कर सकता है! और क्या आप मुझे बता सकते हैं कि कुंजीकोड 26 कैसे प्राप्त करें? – powerboy

+2

कीकोड 26 एक कुंजीपटल घटना द्वारा सेट "जो" के लिए एक विशिष्ट आईडी है (CTRL + z इंगित करता है)। कीप्रेस ईवेंट के लिए अधिक चरित्र मैपिंग देखने के लिए, [jQuery दस्तावेज़] (http://api.jquery.com/keypress/) या [यूनिक्सपापा की मुख्य ईवेंट परीक्षक] पर एक नज़र डालें (http://unixpapa.com/js /testkey.html) – Trafalmadorian

+0

Thx। मुझे पता है कि कुंजीकोड का अर्थ क्या है। मेरा मतलब है, 17 Ctrl के लिए है, 90 ज़ेड के लिए है, तो आपको नंबर 26 कैसे मिला? मैं बस googled लेकिन जवाब नहीं मिल सका। – powerboy

-3

दस्तावेज़.ऑकीडाउन = कीडाउन;

document.onkeypress = keyPress;

आदि आईई

में मेरे लिए

वर्क्स

+0

क्या आपने आईई 6 पर कोशिश की है और तीर कुंजियों की कोशिश की है? – powerboy

+0

आप यह नहीं समझाते कि 'keyDown' और' keyPress' क्या हैं। यह एक त्रुटि फेंक देगा। –

7

कोड & Ctrl + Z का पता लगाता है

document.onkeyup = function(e) { 
    if(e.ctrlKey && e.keyCode == 90) { 
    // ctrl+z pressed 
    } 
} 
47

जैसे Ctrl-Z के रूप में तीर कुंजी और शॉर्टकट कुंजी के रूप में प्रिंट न हो सकने कुंजी के लिए: हालांकि, बाद से jQuery कीकोड और charCode event.which का उपयोग कर सामान्य हो, उन्हें अपनी विशिष्ट स्थितियों की एक किस्म में event.which उपयोग करने की सलाह , Ctrl-x, Ctrl-c जो ब्राउज़र में कुछ क्रियाओं को ट्रिगर कर सकता है (उदाहरण के लिए, संपादन योग्य दस्तावेज़ों या तत्वों के अंदर), आपको सभी ब्राउज़रों में एक कुंजीपटल ईवेंट नहीं मिल सकता है। यदि आप ब्राउज़र की डिफ़ॉल्ट कार्रवाई को दबाने में रुचि रखते हैं, तो इस कारण से आपको keydown का उपयोग करना होगा। यदि नहीं, keyup भी वही करेगा।

सभी प्रमुख ब्राउज़रों में काम करता है document करने के लिए एक keydown घटना अटैच किया जा रहा:

document.onkeydown = function(evt) { 
    evt = evt || window.event; 
    if (evt.ctrlKey && evt.keyCode == 90) { 
     alert("Ctrl-Z"); 
    } 
}; 

एक पूर्ण संदर्भ के लिए, मैं दृढ़ता से Jan Wolter's article on JavaScript key handling सलाह देते हैं।

+0

क्या यह एंड्रॉइड के लिए क्रोम पर भी काम करता है? – hendrik

+0

@hendrik: मुझे नहीं लगता कि यह क्यों नहीं होना चाहिए, लेकिन मैं वर्तमान में इसका परीक्षण करने में सक्षम नहीं हूं। –

+0

इसका परीक्षण किया। यह काम करता हैं। – hendrik

6

कुंजी दबाएँ का पता लगाने, कुंजी संयोजन सहित:

window.addEventListener('keydown', function (e) { 
    if (e.ctrlKey && e.keyCode == 90) { 
    // Ctrl + z pressed 
    } 
}); 

लाभ यहाँ है कि आप नहींअधिलेखन किसी भी वैश्विक गुण, लेकिन इसके बजाय केवल एक पक्ष प्रभाव को शुरू कर रहे हैं। अच्छा नहीं है, लेकिन निश्चित रूप से यहां पर अन्य सुझावों की तुलना में काफी कम घृणास्पद है।

0

आधुनिक जेएस के लिए, event.key का उपयोग करें!

document.addEventListener("keypress", function onPress(event) { 
    if (event.key === "z" && event.ctrlKey) { 
     // Do something awesome 
    } 
}); 

Mozilla Docs

Supported Browsers

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