JQuery के साथ भागने के लिए कौन सा कीकोड है


559

मेरे दो कार्य हैं। जब एंटर दबाया जाता है तो फंक्शन सही तरीके से चलता है लेकिन जब बच जाता है तो उसे दबाया नहीं जाता है। भागने की कुंजी के लिए सही संख्या क्या है?

$(document).keypress(function(e) { 
    if (e.which == 13) $('.save').click();   // enter (works as expected)
    if (e.which == 27) $('.cancel').click(); // esc   (does not work)
});

कीप एक कुंजी (सही कैप आदि में) से जुड़ा एक चरित्र लौटाएगा, कीप हार्डवेयर बटन की संख्या को दबाएगा। ईएससी के लिए आपको हार्डवेयर कोड 27 (
एससीआई


वहाँ वास्तव में एक सरल चाल है जो भी आप चाहते हैं keyCode पता लगाने के लिए है। बस एक नया टैब खोलें, document.addEventListener("keydown", e => console.log(e.keyCode))अपने ब्राउज़र कंसोल में डालें , विंडो में क्लिक करें और उस कुंजी को दबाएं जिसे आप ढूंढ रहे हैं।
अराजकतावादी

जवाबों:


925

कीप इवेंट के साथ प्रयास करें :

$(document).keyup(function(e) {
  if (e.keyCode === 13) $('.save').click();     // enter
  if (e.keyCode === 27) $('.cancel').click();   // esc
});

39
इसका कीप बनाम कीपर से कोई लेना-देना नहीं है। ESCAPE पर कब्जा करने के लिए, आपको e.which पर देखने की जरूरत है जो e.which के विपरीत है (जो कि इस उदाहरण को करने के लिए होता है)।
दोपहर

211
"यह कीप बनाम कीपर से कोई लेना-देना नहीं है" - यह गलत है, विटामिन है। कीवर्ड्स ब्राउज़र के बीच लगातार संभाले हुए नहीं लगते हैं ( IE बनाम क्रोम बनाम फ़ायरफ़ॉक्स में Api.jquery.com/keypress पर डेमो आज़माएं - कभी-कभी यह रजिस्टर नहीं होता है, और 'दोनों' और 'कीकोड' दोनों भिन्न होते हैं) जबकि कीप सुसंगत है। e.which jquery- सामान्यीकृत मान है, इसलिए 'कौन' या 'कीकोड' दोनों को कीप में काम करना चाहिए।
जॉर्डन कुंड

13
@ जोर्डन ब्रौट - मैं आपसे अपनी टिप्पणी उत्तर के रूप में पोस्ट करने का अनुरोध करना चाहूंगा ताकि लोग इसे पढ़ें और आपकी टिप्पणी का वास्तविक अर्थ समझें! चूँकि आपकी टिप्पणी उतनी ही महत्वपूर्ण है जितना कि उत्तर देना
Murtaza

15
keydownदेशी व्यवहार की नकल करेंगे - कम से कम विंडोज़ पर जहां एक संवाद में ESC या रिटर्न दबाकर कुंजी जारी होने से पहले कार्रवाई को ट्रिगर किया जाएगा।
थोमथोम

2
@gibberish मैंने अपनी टिप्पणी यहाँ एक उत्तर के रूप में जोड़ दी है: stackoverflow.com/a/28502629/58876
जॉर्डन कुंड

77

अपने फ़ंक्शन में कीकोड मानों को हार्डकोड करने के बजाय, अपने अर्थ को बेहतर बताने के लिए नामित स्थिरांक का उपयोग करने पर विचार करें:

var KEYCODE_ENTER = 13;
var KEYCODE_ESC = 27;

$(document).keyup(function(e) {
  if (e.keyCode == KEYCODE_ENTER) $('.save').click();
  if (e.keyCode == KEYCODE_ESC) $('.cancel').click();
});

कुछ ब्राउज़र (जैसे फ़ायरफ़ॉक्स, दूसरों के अनिश्चित) एक वैश्विक KeyEventवस्तु को परिभाषित करते हैं जो आपके लिए इस प्रकार के स्थिरांक को उजागर करता है। यह एसओ प्रश्न अन्य ब्राउज़रों में भी उस वस्तु को परिभाषित करने का एक अच्छा तरीका दिखाता है।


15
क्या, 27 बच निकलने की कुंजी के रूप में सिर्फ तुम पर कूद नहीं है? ईमानदारी से, यह वास्तव में अधिक लोगों द्वारा किया जाना चाहिए। मैं उन्हें "मैजिक नंबर" और "मैजिक स्ट्रिंग्स" कहता हूं। 72 का क्या अर्थ है? आपके पास अपने कोड आधार में 300 बार बहुत विशिष्ट और अस्थिर स्ट्रिंग कॉपी-पेस्ट क्यों है? आदि
vbullinger

1
या आप बस प्रत्येक के ऊपर एक टिप्पणी जोड़ सकते हैं, क्योंकि आप केवल एक बार उनका उपयोग करने की संभावना रखते हैं। IMO केवल पठनीय के रूप में
इवान डर्स्ट

8
@IvanDurst आप केवल प्रति विधि एक बार उनका उपयोग कर सकते हैं , लेकिन मैं अपने प्रोजेक्ट (एस) में कई बार उनका उपयोग करता हूं। क्या आप वास्तव में सुझाव दे रहे हैं कि आप (1) मूल्यों को देखना चाहते हैं और (2) हर बार जब आप एक कुंजी कोड का उपयोग करना चाहते हैं तो उन्हें टिप्पणी करें? मैं आपके बारे में नहीं जानता, लेकिन मुझे न तो उन्हें याद करने की इच्छा है और न ही विश्वास है कि अन्य प्रोग्रामर लगातार उन पर टिप्पणी करेंगे। यह कोडिंग को आसान और अधिक सुसंगत बनाने के बारे में है, न कि केवल अधिक पठनीय।
सेठ पेट्री-जॉनसन

2
कोई व्यक्ति जो जानता है कि उनका क्या मतलब है, उन्हें टिप्पणी करने के लिए अर्थ देखने की जरूरत नहीं है, और एक टिप्पणी टाइप करना उतनी ही जल्दी है जितना लंबा नाम लिखना।
NetMage

6
जब भी हम हेक्स में चरित्र स्थिरांक कोड करते थे तो अच्छे पुराने दिनों के साथ क्या हुआ था? हर कोई जानता है कि ईएससी है 0x1Bऔर एंटर है 0x0D, है ना?
डेविड आर ट्रिब्बल

42

(मेरी पिछली टिप्पणी से निकाला गया उत्तर )

आपको keyupइसके बजाय उपयोग करने की आवश्यकता है keypress। उदाहरण के लिए:

$(document).keyup(function(e) {
  if (e.which == 13) $('.save').click();     // enter
  if (e.which == 27) $('.cancel').click();   // esc
});

keypressब्राउज़र के बीच लगातार संभाला नहीं लगता है ( IE / Chrome में फ़ायरफ़ॉक्स में http://api.jquery.com/keypress पर डेमो आज़माएं । कभी-कभी keypressपंजीकरण नहीं होता है, और दोनों के लिए मान 'जो' और ' keyCode 'भिन्न) जबकि keyupसुसंगत है।

चूंकि, e.whichबनाम e.keyCode: नोट की कुछ चर्चा थी, जो कि e.whichसामान्यीकृत मूल्य है और उपयोग के लिए अनुशंसित है:

Event.which गुण event.keyCode और event.charCode को सामान्य करता है। यह कीबोर्ड कुंजी इनपुट के लिए event.which देखने के लिए अनुशंसित है।

( http://api.jquery.com/event.which/ से )


5
मैं यहां यह भी जोड़ना चाहूंगा कि जो ब्राउज़र keypressभागने पर आग नहीं लगाते हैं वे इसे सही कर रहे हैं। keypressआग का मतलब केवल तब होता है जब चाबी एक चरित्र का उत्पादन करती है जबकि keyupहमेशा आग। developer.mozilla.org/en-US/docs/Web/Events/keypress
ओमसीबी

26

किसी भी कुंजी के लिए कीकोड खोजने के लिए, इस सरल फ़ंक्शन का उपयोग करें:

document.onkeydown = function(evt) {
    console.log(evt.keyCode);
}

14

27भागने की कुंजी के लिए कोड है। :)


1
मेरे पास दो कार्य हैं जब एंटर दबाया जाता है, तो फ़ंक्शन सही ढंग से चलता है, लेकिन एस्केप कुंजी के साथ नहीं। $ (दस्तावेज़) ।keypress (फंक्शन (e) {if (e.which == 13) {$ ('। Save') क्लिक करें। ();} अगर (e.which == 27) {$ ('रद्द करें'); क्लिक करें ();}});
शीशांत

$ (दस्तावेज़) .keypress (फ़ंक्शन (e) {y = e.keyCode; e.keyCode :.wh.which;}); जब मैं अलर्ट (y) करता हूं, तो यह IE और FF में 27 अलर्ट करता है। क्या आप सुनिश्चित हैं कि आपके कोड में कुछ और गलत नहीं है?
साल्टी

14

आपकी सबसे अच्छी शर्त है

$(document).keyup(function(e) { 
    if (e.which === 13) $('.save').click();   // enter 
    if (e.which === 27) $('.cancel').click(); // esc   

    /* OPTIONAL: Only if you want other elements to ignore event */
    e.preventDefault();
    e.stopPropagation();
});

सारांश

  • whichkeyCodeसामान्य से अधिक बेहतर है क्योंकि यह सामान्यीकृत है
  • keyupkeydownअगर उपयोगकर्ता इसे दबाए रखता है तो की-डाउन कई बार होने से अधिक बेहतर है।
  • keypressजब तक आप वास्तविक पात्रों को पकड़ना नहीं चाहते तब तक उपयोग न करें ।

दिलचस्प रूप से बूटस्ट्रैप अपने ड्रॉपडाउन घटक (3.0.2 के रूप में) और कीकोड का उपयोग करता है! मुझे लगता है कि यह शायद वहाँ गरीब विकल्प है।

JQuery के डॉक्टर से संबंधित स्निपेट

जबकि ब्राउज़र इस जानकारी को संग्रहीत करने के लिए अलग-अलग गुणों का उपयोग करते हैं, jQuery .which संपत्ति को सामान्य करता है ताकि आप कुंजी कोड को पुनः प्राप्त करने के लिए इसे मज़बूती से उपयोग कर सकें। यह कोड कीबोर्ड पर एक कुंजी से मेल खाता है, जिसमें विशेष कुंजी जैसे कि तीर के लिए कोड शामिल हैं। वास्तविक पाठ प्रविष्टि को पकड़ने के लिए .keypress () एक बेहतर विकल्प हो सकता है।

अन्य रुचि की वस्तु: जावास्क्रिप्ट कीपर लाइब्रेरी


10

JEscape प्लगइन आज़माएं ( Google ड्राइव से डाउनलोड करें )

$(document).escape(function() { 
   alert('ESC button pressed'); 
});

या क्रॉस ब्राउज़र के लिए कीकोड प्राप्त करें

var code = (e.keyCode ? e.keyCode : e.which);
if (code === 27) alert('ESC');
if (code === 13) alert('ENTER');

शायद आप स्विच का उपयोग कर सकते हैं

var code = (e.keyCode ? e.keyCode : e.which);
switch (code) {
    case 27:
       alert('ESC');
       break;
     case 13:
       alert('ENTER');
       break;
}

8

आपका कोड ठीक काम करता है। यह सबसे अधिक संभावना है कि खिड़की पर ध्यान केंद्रित नहीं है। मैं iframe बॉक्स आदि को बंद करने के लिए एक समान फ़ंक्शन का उपयोग करता हूं।

$(document).ready(function(){

    // Set focus
    setTimeout('window.focus()',1000);

});

$(document).keypress(function(e) {

    // Enable esc
    if (e.keyCode == 27) {
      parent.document.getElementById('iframediv').style.display='none';
      parent.document.getElementById('iframe').src='/views/view.empty.black.html';
    }

});

8

मैं एक ही काम करने की कोशिश कर रहा था और यह मुझे बाहर बकवास बकवास था। फ़ायरफ़ॉक्स में, ऐसा प्रतीत होता है कि यदि आप कुछ चीज़ों को करने की कोशिश करते हैं जब एस्केप कुंजी को दबाया जाता है, तो यह एस्केप कुंजी को संसाधित करना जारी रखता है जो तब आप जो भी करने की कोशिश कर रहे थे उसे रद्द कर देते हैं। अलर्ट ठीक काम करता है। लेकिन मेरे मामले में, मैं इतिहास में वापस जाना चाहता था जो काम नहीं करता था। अंत में पता चला कि मुझे इस घटना के प्रचार को रोकने के लिए मजबूर करना पड़ा जैसा कि नीचे दिखाया गया है ...

if (keyCode == 27)
{
    history.back();

    if (window.event)
    {
        // IE works fine anyways so this isn't really needed
        e.cancelBubble = true;
        e.returnValue = false;
    }
    else if (e.stopPropagation)
    {
        // In firefox, this is what keeps the escape key from canceling the history.back()
        e.stopPropagation();
        e.preventDefault();
    }

    return (false);
}

8

यह समझाने के लिए कि अन्य उत्तर कहाँ नहीं हैं; समस्या आपके उपयोग की है keypress

शायद घटना सिर्फ गलत नाम की है, लेकिन keypressआग में कब परिभाषित की गई है । यानी पाठ। जबकि आप जो चाहते हैं / है , जो क्रमशः (पहले या बाद में) जब भी आग उगलता है । यानी कीबोर्ड पर उन चीजों को।when an actualcharacteris being inserted
keydownkeyupthe user depresses akey

यह अंतर यहाँ दिखाई देता है क्योंकि escएक नियंत्रण चरित्र है (शाब्दिक रूप से 'गैर-मुद्रण वर्ण') और इसलिए कोई पाठ नहीं लिखता है, इस प्रकार फायरिंग भी नहीं होती है keypress
enterअजीब है, क्योंकि भले ही आप इसे एक नियंत्रण चरित्र (यानी यूआई को नियंत्रित करने के लिए) के रूप में उपयोग कर रहे हैं, यह अभी भी एक नया-पंक्ति वर्ण सम्मिलित कर रहा है, जो आग लगाएगा keypress

स्रोत: quirksmode


1
युक्ति पढ़ने के लिए यश! यह सुनिश्चित करने के लिए स्वीकृत उत्तर होना चाहिए :)
DylanYoung

7

सभी वर्णों के लिए हेक्स कोड प्राप्त करने के लिए: http://asciitable.com/


2
मैं यह कहने जा रहा था कि ..... मुझे नफरत है कि यह साइट खोज परिणामों में सबसे ऊपर है क्योंकि यह बहुत बदसूरत है, लेकिन यह आवश्यक जानकारी को व्यक्त करता है।
एमपीएन

1
ध्यान दें कि ईवेंट और ब्राउज़र के आधार पर, कुंजी कोड हमेशा एससीआई टेबल से मेल नहीं खाते हैं।
एलन एच।

2
डाउनवोट: प्रश्न का उत्तर नहीं देता है, प्रश्न का उत्तर भी नहीं देता है, हेक्स का सवाल से कोई लेना-देना नहीं है और ओपी पहले से ही esc == 27 के ज्ञान का प्रदर्शन करता है।
जेरेमी

7

e.keyCodeएमडीएन पर निर्धारित अद्यतन की तुलना में बस एक अद्यतन उत्तर पोस्ट करना ।

बल्कि आपको इसके e.keyबजाय चुनना चाहिए जो हर चीज के लिए साफ नामों का समर्थन करता है। यहाँ प्रासंगिक कॉपी पास्ता है

window.addEventListener("keydown", function (event) {
  if (event.defaultPrevented) {
    return; // Do nothing if the event was already processed
  }

  switch (event.key) {
    case "ArrowDown":
      // Do something for "down arrow" key press.
      break;
    case "ArrowUp":
      // Do something for "up arrow" key press.
      break;
    case "ArrowLeft":
      // Do something for "left arrow" key press.
      break;
    case "ArrowRight":
      // Do something for "right arrow" key press.
      break;
    case "Enter":
      // Do something for "enter" or "return" key press.
      break;
    case "Escape":
      // Do something for "esc" key press.
      break;
    default:
      return; // Quit when this doesn't handle the key event.
  }

  // Cancel the default action to avoid it being handled twice
  event.preventDefault();
}, true);

3
लेकिन ऐसा लगता है कि यह केवल फ़ायरफ़ॉक्स और क्रोम में समर्थित है।
गायन वीरकुट्टी


दुर्भाग्य से, इंटरनेट एक्सप्लोरर के कम से कम कुछ संस्करण Escमानक के बजाय कोड पास करते हैं Escape
रॉबिन स्टीवर्ट

6

कीबोर्ड इनपुट और प्रमुख संयोजनों को कैप्चर करने के लिए एक मजबूत जावास्क्रिप्ट लाइब्रेरी में प्रवेश किया। इसकी कोई निर्भरता नहीं है।

http://jaywcjlove.github.io/hotkeys/

hotkeys('enter,esc', function(event,handler){
    switch(handler.key){
        case "enter":$('.save').click();break;
        case "esc":$('.cancel').click();break;
    }
});

हॉटकी निम्नलिखित संशोधक को समझता है: , shiftoptionaltctrlcontrolcommand, और

निम्नलिखित विशेष कुंजी शॉर्टकट के लिए इस्तेमाल किया जा सकता है: backspacetab, clear, enter, return, esc, escape, space, up, down, left, right, home, end, pageup, pagedown, del, deleteऔर f1के माध्यम से f19


5

मैंने हमेशा keyup और e.which का उपयोग किया है ताकि एस्केप की को पकड़ा जा सके।


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.