जावास्क्रिप्ट में KeyCode से वर्ण मान प्राप्त करें ... फिर ट्रिम करें


152

मेरे पास अब यही है:

$("input").bind("keydown",function(e){
    var value = this.value + String.fromCharCode(e.keyCode);
}

यदि e.keyCodeएक ASCII वर्ण नहीं हो सकता है ( Alt, backspace, del, arrows।, आदि) ... मैं अब करने की आवश्यकता होगी trimइन मूल्यों से valueकिसी भी तरह (- देखने तालिकाओं के साथ नहीं अधिमानतः प्रोग्राम के रूप में)।

मैं jQuery का उपयोग कर रहा हूँ।

मुझे keydownइवेंट का उपयोग करना चाहिए । keyPressकुछ चाबियाँ मैं (कब्जा करने की जरूरत के लिए सक्रिय नहीं है Esc, del, backspace, आदि)।

मैं setTimeoutइनपुट मूल्य प्राप्त करने के लिए उपयोग नहीं कर सकता । setTimeout(function(){},0)बहुत धीमी है।


11
आपको keydownचरित्र कोड कैप्चर करने के लिए उपयोग करना चाहिए ? : आप एक सवारी के एक नरक के लिए कर रहे हैं quirksmode.org/js/keys.html : (संकेत उपयोग keypress!! )
क्रीसेंट ताजा

1
चरित्र का मामला मायने नहीं रखता। और मुझे कम से कम एफएफ और आईई के लिए ऊपर, नीचे, बाएं, दाएं, एसईसी, डेल, बैकस्पेस पर कब्जा करने की आवश्यकता है; इसलिए कीप प्रश्न से बाहर है। हालांकि संकेत के लिए धन्यवाद। :-)
डेविड मर्डोक

इस समस्या के जवाब में मैंने सिर्फ एक jQuery प्लगइन लिखा है: github.com/bpeacock/key-to-charCode यह थोड़ा नीचे और गंदा है और इसे jQuery में बेहतर एकीकृत किया जा सकता है, लेकिन यह एक शुरुआत है।
ब्रायन पीकॉक

1
जो कोई भी यहां आया था, उसके लिए KeyCode समस्या को हल करने की कोशिश कर रहा था, लेकिन वास्तव में केवल यह देखना चाहता है कि किस कुंजी को दबाया गया था, इस उत्तर को देखें । TLDR:document.onkeydown = function(e){ console.log('Key: ' + e.key); }
user1717828

जवाबों:


164

हो सकता है कि मैं इस प्रश्न को सही ढंग से नहीं समझ पाया, लेकिन क्या आप keyupदोनों इनपुट को कैप्चर करना चाहते हैं, तो क्या आप इसका उपयोग नहीं कर सकते ?

$("input").bind("keyup",function(e){
    var value = this.value + String.fromCharCode(e.keyCode);
});

10
यह उन अन्य स्थानों के साथ काम नहीं करता है जो ASCII रेंज के बाहर हैं (जैसे कि उदाहरण के लिए लैटिन -1, जर्मन, फ्रेंच, इतालवी और स्पेनिश अगर आपको पता होना चाहिए)। स्पष्ट रूप से गैर मुद्रण योग्य कुंजी के लिए भी विफल रहता है।
फ्लोरियन बोश

9
संख्या पैड पर संख्याओं का उपयोग करते समय यह भी विफल रहता है, e.keyCode ASCII (या UTF-x) कोड नहीं है।
टॉम चिवर्टन

2
बुरा जवाब, यह बुनियादी पात्रों के साथ भी काम नहीं करता है। अर्धविराम कीकोड, उदाहरण के लिए, 186 है, इस पर एक String.fromCharCode () चलाएं और आपको कचरा मिलेगा। समस्या यह है कि कीकोड सभी वर्णों के लिए ASCII के अनुरूप नहीं है। अर्धविराम के लिए ASCII वर्ण 59 है। प्रत्येक विशेष वर्ण के लिए एक ही समस्या सही है, KeyCode String.fromCharCode () के लिए सही कोड वापस नहीं करता है।
अलेक्जेंडर त्सेपकोव

193

मेरे अनुभव String.fromCharCode(e.keyCode)में अविश्वसनीय है। String.fromCharCodeएक तर्क के रूप में यूनिकोड चारकोड की अपेक्षा करता है; e.keyCodeजावास्क्रिप्ट कीकोड लौटाता है। जावास्क्रिप्ट कीकोड और यूनिकोड चारकोड एक ही बात नहीं हैं ! विशेष रूप से, नंबरपैड कुंजियाँ keycodeसाधारण संख्या कुंजियों (क्योंकि वे अलग-अलग कुंजियाँ होती हैं) से अलग-अलग लौटती हैं जबकि keycodeदोनों upperऔर lowercaseअक्षरों (दोनों मामलों में आप एक ही कुंजी दबाते हैं ) के लिए समान लौटाया जाता है , उनके अलग-अलग होने के बावजूद charcodes

उदाहरण के लिए, साधारण संख्या कुंजी 1 keycode49 के साथ एक घटना उत्पन्न करता है जबकि नंबरपैड कुंजी 1 (साथ Numlock) keycode97 उत्पन्न करता है । String.fromCharCodeनिम्नलिखित के साथ प्रयुक्त :

String.fromCharCode(49) returns "1"
String.fromCharCode(97) returns "a"

String.fromCharCodeयूनिकोड चार्कोड की अपेक्षा करता है, जावास्क्रिप्ट कीकोड को नहीं। कुंजी 65 की aएक घटना के साथ एक घटना उत्पन्न करती है keycode, चरित्र के मामले से स्वतंत्र (जो कि Shiftकुंजी दबाए जाने के लिए एक संशोधक है, तो घटना में आदि)। चरित्र aमें charcode61 का यूनिकोड है जबकि चरित्र Aमें charcode41 का (उदाहरण के लिए, http://www.utf8-chartable.de/ ) है। हालाँकि, वे hexमान हैं, दशमलव में परिवर्तित करने से हमें charcode"ए" के लिए 65 और "ए" के लिए 97 मिलता है। [1] यह String.fromCharCodeउन मूल्यों के अनुरूप है जो हमें इन मूल्यों के लिए मिलते हैं।

मेरी अपनी आवश्यकता प्रसंस्करण संख्या और साधारण अक्षरों (स्ट्रिंग में स्थिति के आधार पर स्वीकार करने या अस्वीकार करने) तक सीमित थी और नियंत्रण वर्ण ( F-s, Ctrl-something) के माध्यम से दे रही थी। इस प्रकार मैं नियंत्रण वर्णों की जांच कर सकता हूं, यदि यह एक नियंत्रण चरित्र नहीं है जिसे मैं एक सीमा के खिलाफ जांचता हूं और उसके बाद ही मुझे वास्तविक चरित्र प्राप्त करने की आवश्यकता है। यह देखते हुए कि मैं मामले को लेकर चिंतित नहीं हूं (मैंने वैसे भी सभी पत्रों को अपरकेस में बदल दिया है) और पहले से ही कीकोड की सीमा को सीमित कर दिया है, मुझे केवल नंबरपैड कुंजी के बारे में चिंता करनी होगी। उसके लिए निम्नांकित उपवाक्य:

String.fromCharCode((96 <= key && key <= 105)? key-48 : key)

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

मैं भी उल्लेख करता हूं e.which(यदि आप jQuery का उपयोग कर रहे हैं) जो सामान्य हो जाता है e.keyCodeऔर e.charCode, ताकि आपको इस बात की चिंता करने की आवश्यकता न हो कि किस प्रकार की कुंजी दबाया गया था। इसके साथ संयोजन के साथ समस्या String.fromCharCodeबनी हुई है।

[१] मैं थोड़ी देर के लिए उलझन में था -। सभी डॉक्स का कहना है कि String.fromCharCodeएक यूनिकोड की उम्मीद है charcode, जबकि व्यवहार में यह ASCII चार्जकोड के लिए काम करने के लिए लग रहा था, लेकिन मुझे लगता है कि हेक्स से दशमलव में बदलने की आवश्यकता के कारण, इस तथ्य के साथ संयुक्त किया गया था कि ASCII चार्जकोड और यूनिकोड दशमलव चारकोड साधारण के लिए ओवरलैप करते हैं। लैटिन अक्षर।


2
इस टिप्पणी ने मेरी सभी समस्याओं को हल कर दिया। यह मेरे लिए आश्चर्यजनक है कि jQuery ने जावास्क्रिप्ट के "String.fromCharCode" के बराबर "fromKeyCode" को लागू नहीं किया है
क्रिस J

27
ऐसा लगता है कि KeyPress इवेंट ऐसा करता है। Stackoverflow.com/a/9350415/209568 देखें । JQuery के डॉक्स से "ध्यान दें कि कीडाउन और कीप एक कोड प्रदान करते हैं जो यह बताता है कि किस कुंजी को दबाया गया है, जबकि की-बोर्ड इंगित करता है कि किस वर्ण में प्रवेश किया गया था। उदाहरण के लिए, एक लोअरकेस" a "को की-डाउन और की-अप के द्वारा 65 के रूप में रिपोर्ट किया जाएगा, लेकिन keypress द्वारा 97। । एक अपरकेस "ए" को सभी घटनाओं के अनुसार 65 के रूप में रिपोर्ट किया जाता है। इस भेद के कारण, जब तीर कुंजी के रूप में विशेष कीस्ट्रोक्स को पकड़ना, .keydown () या .keyup () एक बेहतर विकल्प है। "
एडम

यह उन लोगों के लिए सबसे अप्रिय है जो कीडाउन के आदी हैं।
आइजैक बोलिंजर

ASCII और यूनिकोड के बारे में उस अंतिम बिट पर एक नोट। यूनिकोड में एक ही स्थान पर सभी 128 ASCII वर्ण हैं। यह जानबूझकर किया गया था ताकि एएससीआईआई के रूप में किसी भी फाइल को मूल रूप से एन्कोड किया जा सके (और इसे आवश्यक कार्य के साथ यूनिकोड में परिवर्तित किया जा सके)। विस्तारित ASCII वर्ण हालांकि उसी स्थान पर नहीं हैं, इसलिए यदि आप उन वर्णों का उपयोग करते हैं जो आप भाग्य से बाहर हैं।
डेनियल

1
इसका मतलब keyCodeयह जानना है कि किस कुंजी को दबाया गया था, न कि यह जानने के लिए कि किस चरित्र का उपयोग करना है। उदाहरण के लिए, ड्वोरक कीबोर्ड पर "U" में QWERTY कीबोर्ड पर "F" के समान कीकोड है या कोरियाई कीबोर्ड आदि पर "Korean" है। बिंदु यह नहीं है कि इसे एक चरित्र में परिवर्तित किया जाए, यह वहां है ताकि आप कर सकें आसानी से एक कीबोर्ड की स्थिति में चीजों को मैप करें।
विंसेंट मैकनाब

77

प्रमुख कोड द्वारा अनुक्रमित पठनीय प्रमुख नाम

अपेक्षाकृत कुछ महत्वपूर्ण कोड हैं इसलिए मैंने बस एक स्थिर सरणी में सभी संबंधित मूल्यों को सूचीबद्ध किया है ताकि मैं केवल संख्या 65को Aउपयोग में बदल सकूंkeyboardMap[65]

सभी कुंजी कोड एक मुद्रण योग्य चरित्र के लिए मैप नहीं करते हैं ताकि कुछ अन्य पहचान योग्य स्ट्रिंग वापस आ जाए।

आपको अपनी आवश्यकताओं के अनुरूप सरणी को संशोधित करने की आवश्यकता हो सकती है और बस उन सभी वर्णों के लिए खाली स्ट्रिंग वापस कर सकते हैं जिन्हें आप अनुवाद करने की परवाह नहीं करते हैं। निम्न सरणी मुझे जल्दी और मज़बूती से निर्धारित करने की अनुमति देती है कि किसी भी वातावरण में किस कुंजी को दबाया गया था। का आनंद लें!

// names of known key codes (0-255)

var keyboardMap = [
  "", // [0]
  "", // [1]
  "", // [2]
  "CANCEL", // [3]
  "", // [4]
  "", // [5]
  "HELP", // [6]
  "", // [7]
  "BACK_SPACE", // [8]
  "TAB", // [9]
  "", // [10]
  "", // [11]
  "CLEAR", // [12]
  "ENTER", // [13]
  "ENTER_SPECIAL", // [14]
  "", // [15]
  "SHIFT", // [16]
  "CONTROL", // [17]
  "ALT", // [18]
  "PAUSE", // [19]
  "CAPS_LOCK", // [20]
  "KANA", // [21]
  "EISU", // [22]
  "JUNJA", // [23]
  "FINAL", // [24]
  "HANJA", // [25]
  "", // [26]
  "ESCAPE", // [27]
  "CONVERT", // [28]
  "NONCONVERT", // [29]
  "ACCEPT", // [30]
  "MODECHANGE", // [31]
  "SPACE", // [32]
  "PAGE_UP", // [33]
  "PAGE_DOWN", // [34]
  "END", // [35]
  "HOME", // [36]
  "LEFT", // [37]
  "UP", // [38]
  "RIGHT", // [39]
  "DOWN", // [40]
  "SELECT", // [41]
  "PRINT", // [42]
  "EXECUTE", // [43]
  "PRINTSCREEN", // [44]
  "INSERT", // [45]
  "DELETE", // [46]
  "", // [47]
  "0", // [48]
  "1", // [49]
  "2", // [50]
  "3", // [51]
  "4", // [52]
  "5", // [53]
  "6", // [54]
  "7", // [55]
  "8", // [56]
  "9", // [57]
  "COLON", // [58]
  "SEMICOLON", // [59]
  "LESS_THAN", // [60]
  "EQUALS", // [61]
  "GREATER_THAN", // [62]
  "QUESTION_MARK", // [63]
  "AT", // [64]
  "A", // [65]
  "B", // [66]
  "C", // [67]
  "D", // [68]
  "E", // [69]
  "F", // [70]
  "G", // [71]
  "H", // [72]
  "I", // [73]
  "J", // [74]
  "K", // [75]
  "L", // [76]
  "M", // [77]
  "N", // [78]
  "O", // [79]
  "P", // [80]
  "Q", // [81]
  "R", // [82]
  "S", // [83]
  "T", // [84]
  "U", // [85]
  "V", // [86]
  "W", // [87]
  "X", // [88]
  "Y", // [89]
  "Z", // [90]
  "OS_KEY", // [91] Windows Key (Windows) or Command Key (Mac)
  "", // [92]
  "CONTEXT_MENU", // [93]
  "", // [94]
  "SLEEP", // [95]
  "NUMPAD0", // [96]
  "NUMPAD1", // [97]
  "NUMPAD2", // [98]
  "NUMPAD3", // [99]
  "NUMPAD4", // [100]
  "NUMPAD5", // [101]
  "NUMPAD6", // [102]
  "NUMPAD7", // [103]
  "NUMPAD8", // [104]
  "NUMPAD9", // [105]
  "MULTIPLY", // [106]
  "ADD", // [107]
  "SEPARATOR", // [108]
  "SUBTRACT", // [109]
  "DECIMAL", // [110]
  "DIVIDE", // [111]
  "F1", // [112]
  "F2", // [113]
  "F3", // [114]
  "F4", // [115]
  "F5", // [116]
  "F6", // [117]
  "F7", // [118]
  "F8", // [119]
  "F9", // [120]
  "F10", // [121]
  "F11", // [122]
  "F12", // [123]
  "F13", // [124]
  "F14", // [125]
  "F15", // [126]
  "F16", // [127]
  "F17", // [128]
  "F18", // [129]
  "F19", // [130]
  "F20", // [131]
  "F21", // [132]
  "F22", // [133]
  "F23", // [134]
  "F24", // [135]
  "", // [136]
  "", // [137]
  "", // [138]
  "", // [139]
  "", // [140]
  "", // [141]
  "", // [142]
  "", // [143]
  "NUM_LOCK", // [144]
  "SCROLL_LOCK", // [145]
  "WIN_OEM_FJ_JISHO", // [146]
  "WIN_OEM_FJ_MASSHOU", // [147]
  "WIN_OEM_FJ_TOUROKU", // [148]
  "WIN_OEM_FJ_LOYA", // [149]
  "WIN_OEM_FJ_ROYA", // [150]
  "", // [151]
  "", // [152]
  "", // [153]
  "", // [154]
  "", // [155]
  "", // [156]
  "", // [157]
  "", // [158]
  "", // [159]
  "CIRCUMFLEX", // [160]
  "EXCLAMATION", // [161]
  "DOUBLE_QUOTE", // [162]
  "HASH", // [163]
  "DOLLAR", // [164]
  "PERCENT", // [165]
  "AMPERSAND", // [166]
  "UNDERSCORE", // [167]
  "OPEN_PAREN", // [168]
  "CLOSE_PAREN", // [169]
  "ASTERISK", // [170]
  "PLUS", // [171]
  "PIPE", // [172]
  "HYPHEN_MINUS", // [173]
  "OPEN_CURLY_BRACKET", // [174]
  "CLOSE_CURLY_BRACKET", // [175]
  "TILDE", // [176]
  "", // [177]
  "", // [178]
  "", // [179]
  "", // [180]
  "VOLUME_MUTE", // [181]
  "VOLUME_DOWN", // [182]
  "VOLUME_UP", // [183]
  "", // [184]
  "", // [185]
  "SEMICOLON", // [186]
  "EQUALS", // [187]
  "COMMA", // [188]
  "MINUS", // [189]
  "PERIOD", // [190]
  "SLASH", // [191]
  "BACK_QUOTE", // [192]
  "", // [193]
  "", // [194]
  "", // [195]
  "", // [196]
  "", // [197]
  "", // [198]
  "", // [199]
  "", // [200]
  "", // [201]
  "", // [202]
  "", // [203]
  "", // [204]
  "", // [205]
  "", // [206]
  "", // [207]
  "", // [208]
  "", // [209]
  "", // [210]
  "", // [211]
  "", // [212]
  "", // [213]
  "", // [214]
  "", // [215]
  "", // [216]
  "", // [217]
  "", // [218]
  "OPEN_BRACKET", // [219]
  "BACK_SLASH", // [220]
  "CLOSE_BRACKET", // [221]
  "QUOTE", // [222]
  "", // [223]
  "META", // [224]
  "ALTGR", // [225]
  "", // [226]
  "WIN_ICO_HELP", // [227]
  "WIN_ICO_00", // [228]
  "", // [229]
  "WIN_ICO_CLEAR", // [230]
  "", // [231]
  "", // [232]
  "WIN_OEM_RESET", // [233]
  "WIN_OEM_JUMP", // [234]
  "WIN_OEM_PA1", // [235]
  "WIN_OEM_PA2", // [236]
  "WIN_OEM_PA3", // [237]
  "WIN_OEM_WSCTRL", // [238]
  "WIN_OEM_CUSEL", // [239]
  "WIN_OEM_ATTN", // [240]
  "WIN_OEM_FINISH", // [241]
  "WIN_OEM_COPY", // [242]
  "WIN_OEM_AUTO", // [243]
  "WIN_OEM_ENLW", // [244]
  "WIN_OEM_BACKTAB", // [245]
  "ATTN", // [246]
  "CRSEL", // [247]
  "EXSEL", // [248]
  "EREOF", // [249]
  "PLAY", // [250]
  "ZOOM", // [251]
  "", // [252]
  "PA1", // [253]
  "WIN_OEM_CLEAR", // [254]
  "" // [255]
];

नोट: उपरोक्त सरणी में प्रत्येक मान की स्थिति महत्वपूर्ण है। ""अज्ञात मूल्यों के साथ कोड के लिए प्लेसहोल्डर हैं।

इस स्थिर सरणी लुकअप दृष्टिकोण का उपयोग करके निम्न कोड स्निपेट आज़माएं ...


ध्यान देने योग्य महत्वपूर्ण कोड

पत्र AZ: (65-90)

keyboardMap[65];  // A
...
keyboardMap[90];  // Z

अंक 0-9: (48-57)

keyboardMap[48];  // 0
...
keyboardMap[57];  // 9

नंबर पैड 0-9: (96-105)

keyboardMap[96];   // NUMPAD0
...
keyboardMap[105];  // NUMPAD9

एरो कीज़: (37-40)

keyboardMap[37];  // LEFT
keyboardMap[38];  // UP
keyboardMap[39];  // RIGHT
keyboardMap[40];  // DOWN

टैब कुंजी: (9)

keyboardMap[9];  // TAB

कुंजी दर्ज करें: (13)

keyboardMap[13];  // ENTER

स्पेसबार की: (32)

keyboardMap[32];  // SPACE

ओएस विशिष्ट कुंजी (91) विंडोज कुंजी (विंडोज) या कमांड कुंजी (मैक)

keyboardMap[91];  // OS_KEY

Alt कुंजी: (18)

keyboardMap[18];  // ALT

नियंत्रण कुंजी: (17)

keyboardMap[17];  // CONTROL

शिफ्ट की: (16)

keyboardMap[16];  // SHIFT

कैप्स लॉक की: (20)

keyboardMap[20];  // CAPS_LOCK

विशेष चर के लिए काम नहीं कर रहा है, अगर शिफ्ट कुंजी के साथ कुंजी दर्ज करें, कोई समाधान?
शैख मतीन

14

बस एक महत्वपूर्ण नोट: ऊपर दिया गया स्वीकृत उत्तर कुंजीकोड> = 144, अर्थात अवधि, अल्पविराम, डैश आदि के लिए सही ढंग से काम नहीं करेगा। उन लोगों के लिए जिन्हें आपको अधिक सामान्य एल्गोरिदम का उपयोग करना चाहिए:

let chrCode = keyCode - 48 * Math.floor(keyCode / 48);
let chr = String.fromCharCode((96 <= keyCode) ? chrCode: keyCode);

यदि आप ऐसा करने के लिए उत्सुक हैं, तो अंतर्निहित जेएस फ़ंक्शन के व्यवहार के कारण यह स्पष्ट रूप से आवश्यक है String.fromCharCode()। मानों के लिए keyCode <= 96यह फ़ंक्शन का उपयोग करके मैप करने के लिए लगता है:

chrCode = keyCode - 48 * Math.floor(keyCode / 48)

मानों के लिए keyCode > 96यह फ़ंक्शन का उपयोग करके मैप करने के लिए लगता है:

chrCode = keyCode

अगर यह अजीब व्यवहार लगता है तो अच्छी तरह से..मैं सहमत हूं। अफसोस की बात है, यह जेएस कोर में देखी गई सबसे अजीब चीज से बहुत दूर होगा।

document.onkeydown = function(e) {
    let keyCode = e.keyCode;
    let chrCode = keyCode - 48 * Math.floor(keyCode / 48);
    let chr = String.fromCharCode((96 <= keyCode) ? chrCode: keyCode);
    console.log(chr);
};
<input type="text" placeholder="Focus and Type"/>


1
आप let2009 से एक प्रश्न के उत्तर में उपयोग करके लोगों को भ्रमित करने जा रहे हैं । :-)
डेविड मर्डोक

12
अगर कोई let
ईएस

@galarant क्या आप बता सकते हैं कि यह क्यों / कैसे काम करता है?
इज़हार आज़मी

@IzharAazmi ने स्पष्टीकरण जोड़ा। आशा करता हूँ की ये काम करेगा!
गैलेंट

1
यह एक संख्यात्मक कीपैड पर संख्या कुंजियों के लिए सही ढंग से काम नहीं करता है (विस्तारित कीबोर्ड के दाईं ओर कुंजियों की ग्रिड)।
स्कॉट बुकानन

2

मैं यह मान रहा हूं कि यह गेम के लिए है या तेज-प्रतिक्रिया वाले प्रकार के एप्लिकेशन के लिए है, इसलिए KEYPROWN का उपयोग KEYPRESS से अधिक है।

संपादित करें : डांग! मैं दुरुस्त खड़ा हूं (धन्यवाद क्रीसेंट फ्रेश एंड डेविड): JQuery (या यहां तक ​​कि अंतर्निहित DOM होस्ट) WM_KEYDOWN और अन्य घटनाओं के विवरण को उजागर नहीं करते हैं। बल्कि वे इस डेटा को प्री-डाइजेस्ट करते हैं और, JQuery में भी की-डाउन के मामले में, हमें मिलता है:

  • गैर-वर्ण कुंजियों के लिए event.keyCode
  • Event.charCode चरित्र कुंजियों के लिए

ध्यान दें कि ये गुण यूनीकोड ​​मान हैं।
ध्यान दें, मैं JQuery डॉक्स में उस के लिए एक आधिकारिक संदर्भ खोजने में सक्षम नहीं था, लेकिन नेट पर कई सम्मानित उदाहरण इन दो गुणों का संदर्भ देते हैं।

निम्नलिखित कोड, कुछ जावा (मेरा नहीं जावास्क्रिप्ट) से अनुकूलित है, इसलिए पूरी तरह से गलत है ...

निम्नलिखित आपको कीकोड के "दिलचस्प" भाग देगा:

  value = e.KeyCode;
  repeatCount = value & 0xFF;
  scanCode = (value >> 16) & 0xFF;  // note we take the "extended bit" deal w/ it later.
  wasDown = ((value & 0x4000) != 0);  // indicate key was readily down (auto-repeat)
  if (scanCode > 127)
      // deal with extended
  else
      // "regular" character

hm, no go, scanCode में हमेशा परिणाम होता है 0. और e.KeyCode को e.keyCode (KeyCode अपरिभाषित होता है) होना चाहिए।
डेविड मर्डोक

अरे अब… हेलो, रुको… वहा ?? हम यहाँ JScript या कुछ और बात कर रहे हैं?
वर्धमान ताजा

@ डेविड एम। मेरा बुरा, शायद JQuery के "प्री-डाइजेस्ट" ये कोड पार्ट्स हमारे लिए हैं। मैं अब इसमें देख रहा हूँ।
19

1
@ एमजेवी: आपको यह कोड कहां से मिला? क्या यह कभी आपके लिए काम किया है? AFAIK नो डोम कार्यान्वयन ईवेंट ऑब्जेक्ट ( keydownया नहीं) में उस सभी जानकारी को एन्कोड करता है ।
वर्धमान ताजा

@Crescent: मैंने इसे जल्दी से और भोलेपन से अनुकूलित किया, मेरा कुछ जावा कोड, जिस तरह से पुराना है ... वैसे भी, आप पूरी तरह से सही हैं: डोम के कोई भी इस तरह के कच्चे आयोजनों को हाथ नहीं लगाता, यहां तक ​​कि कीबोर्ड के लिए भी। मैंने उसी के अनुसार अपना गद्य तय किया; अभी भी JQuery.com
mjv

0

मुझे पता है कि यह एक पुराना सवाल है, लेकिन मैं आज इस समस्या के लिए एक पूर्व-पैक समाधान की खोज में आया था, और ऐसा कुछ भी नहीं मिला जो वास्तव में मेरी जरूरतों को पूरा करता हो।

यहां एक समाधान (केवल अंग्रेजी) है जो ऊपरी मामले (स्थानांतरित), लोअर केस, विराम चिह्न, नंबर कीपैड आदि का सही ढंग से समर्थन करता है।

यह सरल और सीधे-आगे की पहचान के लिए भी अनुमति देता है - और प्रतिक्रिया के लिए - गैर-मुद्रण योग्य कुंजी, जैसे ईएससी, तीर, फ़ंक्शन कुंजियाँ, आदि।

https://jsfiddle.net/5hhu896g/1/

keyboardCharMap and keyboardNameMap are the key to making this work

कुछ टाइपिंग बचाने के लिए डेवएल्गर को धन्यवाद - और बहुत खोज! - नामांकित कुंजी सरणी प्रदान करके।


आपकी बेला सबसे उत्कृष्ट है! साझा करने के लिए धन्यवाद। यह उत्कृष्ट रूप से काम करता है। मैं इसका उपयोग समान मूल्यों वाले आइटम फ़ील्ड्स के लिए एक उदात्त-शैली के बहु-कर्सर संपादन को लागू करने के लिए कर रहा हूँ
टोड हैमर

0

मैं हाल ही में एक मॉड्यूल बुलाया लिखा था keysight तब्दील हो कि keypress, keydown, औरkeyup क्रमशः वर्णों और कुंजियों में घटनाओं।

उदाहरण:

 element.addEventListener("keydown", function(event) {
    var character = keysight(event).char
 })

क्या यह ñ जैसी कुंजियों का समर्थन करता है?
अर्नोल्ड रोआ

@AnnoldRoa मैंने बस कुछ ऐसा किया है जो उम्मीद है कि इस तरह के पात्रों का समर्थन करेगा। मेरे पास उच्चारण पात्रों के साथ कीबोर्ड नहीं है, तो क्या आप परीक्षण करना चाहेंगे?
बीटी

0

आप में से जो लोग यहां आए थे, उनके लिए कीकोड के लिए वास्तविक यूनिकोड चरित्र मूल्यों की तलाश में थे, जैसे मैंने किया, यहां इसके लिए एक फ़ंक्शन है। उदाहरण के लिए, सही तीर यूनिकोड कीकोड दिया गया है जो दृश्यमान स्ट्रिंग को आउटपुट करेगा\u001B\u005B\u0043

function toUnicode(theString) {
    var unicodeString = '';
    for (var i = 0; i < theString.length; i++) {
        var theUnicode = theString.charCodeAt(i).toString(16).toUpperCase();
        while (theUnicode.length < 4) {
            theUnicode = '0' + theUnicode;
        }
        theUnicode = '\\u' + theUnicode;
        unicodeString += theUnicode;
    }
    return unicodeString;
}

0

आप केवल पढ़ने के लिए संपत्ति का उपयोग कर सकते हैं key। यह विशेष कुंजी का भी सम्मान करता हैshift आदि और IE9 द्वारा समर्थित है।

जब कोई गैर-मुद्रण योग्य या विशेष वर्ण दबाया जाता है, तो मान परिभाषित कुंजी मानों जैसे 'Shift'या पर होगा 'Multiply'

  • कीबोर्ड     event.key
  • X             -> 'x'
  • Shift+ X ->'X'
  • F5            -> 'F5'

-2

इस लिंक को देखें किसी भी कुंजी कोड के लिए कुंजी प्रेस और चार मूल्य से कीकोड प्राप्त करें

$('input#inp').keyup(function(e){
   $(this).val(String.fromCharCode(e.keyCode)); 
   $('div#output').html('Keycode : ' + e.keyCode);  
});

1
यह गलत है! चूंकि यह उपयोगकर्ता के कीबोर्ड पर सक्षम वर्तमान भाषा को ध्यान में नहीं रखता है। उदाहरण के लिए, मैं 'ф' दर्ज करता हूं, लेकिन यह
वादिम गुज़ेव

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