जावास्क्रिप्ट में ctrl + z कुंजी संयोजन कैप्चर करना


85

मैं इस कोड के साथ जावास्क्रिप्ट में ctrl+ zकुंजी संयोजन को पकड़ने की कोशिश कर रहा हूं :

<html>
<head>
    <title>Untitled Document</title>
</head>
<body>

    <script type='text/javascript'>
        function KeyPress(e) {
            var evtobj = window.event? event : e


            //test1 if (evtobj.ctrlKey) alert("Ctrl");
            //test2 if (evtobj.keyCode == 122) alert("z");
            //test 1 & 2
            if (evtobj.keyCode == 122 && evtobj.ctrlKey) alert("Ctrl+z");
        }

        document.onkeypress = KeyPress;
    </script>

</body>
</html>

टिप्पणी लाइन "test1" अलर्ट उत्पन्न करता है यदि मैं ctrlकुंजी को दबाए रखता हूं और किसी अन्य कुंजी को दबाता हूं ।

यदि मैं zकुंजी दबाता हूं तो टिप्पणी की गई लाइन "test2" अलर्ट उत्पन्न करती है ।

"परीक्षण 1 और 2" के बाद उन्हें लाइन के अनुसार एक साथ रखें, और ctrlकुंजी को दबाए रखें और फिर कुंजी दबाने zसे चेतावनी उत्पन्न नहीं होती है।

कोड में क्या गलत है?

जवाबों:


95
  1. उपयोग onkeydown(या onkeyup), नहींonkeypress
  2. keyCode90 का प्रयोग करें , 122 का नहीं

ऑनलाइन डेमो: http://jsfiddle.net/29sVC/

स्पष्ट करने के लिए, कीकोड्स वर्ण कोड के समान नहीं हैं।

वर्ण कोड पाठ के लिए हैं (वे एन्कोडिंग के आधार पर भिन्न होते हैं, लेकिन बहुत सारे मामलों में 0-127 ASCII कोड रहते हैं)। कीबोर्ड पर कीज़ के लिए कुंजी कोड मैप। उदाहरण के लिए, यूनिकोड चरित्र में 0x22909 का अर्थ है ic। वास्तव में इसके लिए एक कुंजी रखने वाले कई कीबोर्ड (यदि कोई हो) नहीं हैं।

OS उन इनपुट विधियों का उपयोग करके कीस्ट्रोक्स को कैरेक्टर कोड में बदलने का ध्यान रखता है जो उपयोगकर्ता ने कॉन्फ़िगर किए थे। परिणाम कीप इवेंट में भेजे जाते हैं। (जबकि कीडाउन और कीअप यूजर को बटन दबाने पर जवाब देते हैं, टेक्स्ट टाइपिंग नहीं।)


1
धन्यवाद, वह काम करता है। क्यों नहीं onkeypress और कीकोड 122 काम करता है?
पॉल जॉन्सटन

कृपया अपने समाधान में अलर्ट के बजाय डिफॉल्ट () को कैसे रोकें? मैं Ctrl + t के लिए परीक्षण कर रहा हूं।
सुरेंद्र Jnawali

@SJnawali: मुझे यकीन नहीं है कि यह संभव हैctrl+t
zerkms

4
KeyCode 122 काम क्यों नहीं करता है? ठीक है, 122के लिए है के लिए F11 कुंजी :)
बेबी

7
@PaJJonston क्योंकि एक कुंजी कोड वर्ण कोड के समान नहीं है । वर्ण कोड पाठ के लिए हैं (वे एन्कोडिंग के आधार पर भिन्न होते हैं, लेकिन बहुत सारे मामलों में 0-127 ASCII कोड रहते हैं)। कुंजी कोड एक कीबोर्ड पर कुंजियों को मैप करता है। उदाहरण के लिए, यूनिकोड चरित्र में 0x22909 का अर्थ है ic। वास्तव में इसके लिए एक कुंजी रखने वाले कई कीबोर्ड (यदि कोई हो) नहीं हैं। OS उन इनपुट विधियों का उपयोग करके कीस्ट्रोक्स को कैरेक्टर कोड में बदलने का ध्यान रखता है जो उपयोगकर्ता ने कॉन्फ़िगर किए थे। परिणाम keypressईवेंट में भेजे जाते हैं । (जबकि keydownऔर keyupउपयोगकर्ता को जवाब बटन दबाने, पाठ लिखने नहीं।)
Aidiakapi

28

इस सवाल पर ठोकर खाने वाले भावी लोगों के लिए, काम पाने के लिए यहाँ एक बेहतर तरीका है:

document.addEventListener('keydown', function(event) {
  if (event.ctrlKey && event.key === 'z') {
    alert('Undo!');
  }
});

event.keyकोड का उपयोग करके कोड को सरल करता है, हार्डकोडेड स्थिरांक को हटाता है। इसमें IE 9+ का समर्थन है।

इसके अतिरिक्त, document.addEventListenerइसका उपयोग करने का अर्थ है कि आप अन्य श्रोताओं को एक ही घटना के लिए मना नहीं करेंगे।

अंत में, उपयोग करने का कोई कारण नहीं है window.event। यह सक्रिय रूप से हतोत्साहित है और इसके परिणामस्वरूप नाजुक कोड हो सकता है।


इसके अलावा, मुझे लगता KeyboardEvent.keyCodeहै कि अब एक दो साल पहले से पदावनत किया जाएगा। सभी ब्राउज़रों को कैप्चर करने का सबसे अच्छा तरीका यह है कि e.keyपहले चेक किया जाए और उसके बाद कमबैक किया जाए e.keyCode। या आप इस पॉलीफ़िल का उपयोग कर सकते हैं
हाँ बैरी

9

Ctrl+ tयह भी संभव है ... सिर्फ कीकोड का उपयोग 84 की तरह करें

if (evtobj.ctrlKey && evtobj.keyCode == 84) 
 alert("Ctrl+t");


3

90 की Zकुंजी है और यह आवश्यक कैप्चर करेगा ...

function KeyPress(e){
     // Ensure event is not null
     e = e || window.event;

     if ((e.which == 90 || e.keyCode == 90) && e.ctrlKey) {
         // Ctrl + Z
         // Do Something
     }
}

अपनी आवश्यकताओं के आधार पर आप e.preventDefault();अपने भीतर जोड़ने की इच्छा कर सकते हैं यदि स्टेटमेंट विशेष रूप से आपकी कस्टम कार्यक्षमता करने के लिए।


-3

मेरे द्वारा बनाया गया यह प्लगइन सहायक हो सकता है।

लगाना

आप इस प्लगइन का उपयोग कर सकते हैं जिसे आपको कुंजी कोड्स की आपूर्ति करनी है और इस तरह से चलाया जा सकता है

simulatorControl([17,90], function(){console.log('You have pressed Ctrl+Z');});

कोड में मैंने दिखाया है कि कैसे Ctrl+ के लिए प्रदर्शन करना है Z। आपको लिंक पर विस्तृत दस्तावेज़ मिलेगा। प्लगइन कोडीन पर मेरे पेन के जावास्क्रिप्ट कोड अनुभाग में है।


-5

CTRL+ के लिए इस कोड का उपयोग करें Z। Keypress का keycode Z122 है और CTRL+ Z26 है। इस keycode को अपने कंसोल एरिया में चेक करें

 $(document).on("keypress", function(e) {
       console.log(e.keyCode);
       /*ctrl+z*/
       if(e.keyCode==26)
       {
          //your code here
       }
    });
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.