jQuery Event Keypress : 어떤 키를 눌렀습니까?


706

jQuery를 사용하여 keypress 이벤트에 바인딩 할 때 어떤 키를 눌렀는지 어떻게 알 수 있습니까?

$('#searchbox input').bind('keypress', function(e) {});

을 (를 ENTER) 누르면 제출을 트리거하고 싶습니다 .

[최신 정보]

내가 (또는 더 나은 : 하나의) 대답을 찾았지만 변화의 여지가있는 것처럼 보입니다.)

keyCode그리고 which특히 내가 찾고 ENTER있는 경우 유니 코드 키 가 아닌 차이점이 있습니까?

일부 브라우저는 하나의 속성을 제공하고 다른 브라우저는 다른 속성을 제공합니까?


295
** 누군가 내가 구글에서이 문제에 도달했다면, "keypress"대신 "keyup"이 Firefox, IE 및 Chrome에서 작동한다는 것을 알아야합니다. "keypress"는 Firefox에서만 작동합니다.
Tyler

17
또한, "를 keyDown는"키 (명백하게)을 누르면 된 후 이벤트를 트리거 더 나은 '의 keyup "이상 작동하지만 당신은 텍스트 영역이 비어있는 경우 두 번째 백 스페이스에 이벤트를 트리거하고 싶은 말은 경우에 중요합니다
타일러

12
e.keyCode VS e.which ... 내 테스트에서 Chrome 및 IE8 : keypress () 핸들러는 일반 문자 (예 : Up / Down / Ctrl이 아님)와 e.keyCode 및 e 모두에 대해서만 트리거됩니다. ASCII 코드를 반환합니다. 그러나 Firefox에서는 모든 키가 keypress ()를 트리거합니다. 그러나 일반 문자의 경우 e. ASCII 코드를 반환하고 e.keyCode는 0을 반환하고 특수 문자 (예 : Up / Down / Ctrl)의 경우 e.keyCode가 반환됩니다. 키보드 코드 및 e. 0을 반환합니다. 얼마나 재미 있습니다.
jackocnr

4
경고 : Google 코드에서 사용하지 마십시오. jquery의 저자는 github 저장소 (및 John Resig의 포크)에만있는 패치를 제출 했습니다 : github.com/tzuryby/jquery.hotkeys 하나 이상의 키 이벤트를 동일한 dom 노드에 바인딩 할 때 Google 코드의 이벤트가 잘못 작동합니다. 새로운 것이 그것을 해결합니다.
Daniel Ribeiro

4
예를 들어 오랫동안 키를 누르면 "키업"이 매우 늦게 트리거됩니다. 여기 jsbin.com/aquxit/3/edit를 참조하십시오. keydown이 진행되는 방법
Toskan

답변:


844

실제로 이것은 더 낫습니다 :

 var code = e.keyCode || e.which;
 if(code == 13) { //Enter keycode
   //Do something
 }

84
if ((e.keyCode || e.which) == 13)? ;)
Kezzer

49
이 페이지의 추가 의견에 따르면 jQuery는 정규화되어 매번 이벤트 객체에 'what'이 정의됩니다. 따라서 'keyCode'를 확인할 필요가 없습니다.
Ztyx

197
왜 엄청난 공감대가 중요합니까? 질문은 jQuery에 관한 것입니다.이 쿼리는이 내용을 표준화하므로 사용e.which 중인 이벤트 이외의 다른 것을 사용할 필요가 없습니다 .
Tim Down

48
@ 팀 : 아아, 방금 사용하여 파이어 폭스와이 테스트 api.jquery.com/keypress을 : 나는 누르면 <탭> e.which(남아 설정되어 있지 않습니다 0)하지만, e.keyCode(이다 9). stackoverflow.com/questions/4793233/… 이것이 중요한 이유를 참조하십시오 .
Marcel Korpel

3
@Marcel : 예, jQuery의 키 처리에는 단점이 있으며 불행한 예이지만이 질문에서 묻는 Enter 키의 경우 상황이 매우 간단합니다.
Tim Down

133

이 시도

$('#searchbox input').bind('keypress', function(e) {
    if(e.keyCode==13){
        // Enter pressed... do anything here...
    }
});

5
@VladimirPrudnikov 아, 아아아! 아! 그 링크에서 맥의 eveywhere가 있었다 – 인류! !!
벤 DeMott

1
음, 우리는 너무 윈도우 앱 새 버전을 출시 .. 체크 아웃 snippets.me
블라디미르 Prudnikov

2
@VladimirPrudnikov 리눅스 버전은 어떻습니까?
Arda

@Arda 우리는 리눅스 버전에 대한 계획이 없습니다. 웹 응용 프로그램 및 공용 API가있을 것이다, 그래서 누군가가 :)을 만듭니다 될 수있다
블라디미르 Prudnikov

1
하하하, 리눅스 계획이없는 개발자 도구. 풍부한!
Ziggy

61

jQuery UI를 사용하는 경우 공통 키 코드에 대한 번역이 있습니다. 에서 UI / UI / ui.core.js :

$.ui.keyCode = { 
    ...
    ENTER: 13, 
    ...
};

tests / simulate / jquery.simulate.js에도 일부 번역이 있지만 핵심 JS 라이브러리에서는 찾을 수 없습니다. 당신이 마음에, 나는 단지 소스를 grep'd. 이 매직 넘버를 제거하는 다른 방법이있을 수 있습니다.

String.charCodeAt 및 .fromCharCode를 사용할 수도 있습니다.

>>> String.charCodeAt('\r') == 13
true
>>> String.fromCharCode(13) == '\r'
true

13
수정 * $. uiCode.ENTER **가 아니라 * $. ui.keyCode.ENTER **입니다 .
daniellmb

Uncaught TypeError: String.charCodeAt is not a function당신이 할 말이 있다고 생각합니다'\r'.charCodeAt(0) == 13
Patrick Roberts

39

jQuery를 사용한다고 가정하면 절대적으로 .which를 사용해야합니다. 예, 브라우저마다 다른 속성을 설정하지만 jQuery는 속성을 정규화하고 각 경우에 .which 값을 설정합니다. http://api.jquery.com/keydown/의 설명서를 참조 하십시오.

어떤 키를 눌렀는지 확인하기 위해 핸들러 함수에 전달 된 이벤트 객체를 검사 할 수 있습니다. 브라우저는 서로 다른 속성을 사용하여이 정보를 저장하지만 jQuery는 .which 속성을 정규화하여 키 코드를 검색하는 데 안정적으로 사용할 수 있습니다.


2
내가 본 것에서 event.which를 사용하고 $ .ui.keyCode와 비교하려고하면 불확실한 동작이 발생합니다. 특히 소문자 [L] 키는 $ .ui.keyCode.NUMPAD_ENTER에 매핑됩니다. 귀엽다.
Danny

4
이 버그를 보여주는 재현이 있습니까? 작업을 다시 구현하지 않고 jQuery 소유자에게이를보고하는 것이 좋습니다.
Frank Schwieterman

31

...이 예제는 양식 제출을 방지합니다 (일반적으로 키 스트로크 # 13을 캡처 할 때 기본 의도).

$('input#search').keypress(function(e) {
  if (e.which == '13') {
     e.preventDefault();
     doSomethingWith(this.value);
   }
});

28

편집 : 이것은 IE에서만 작동합니다 ...

나는 이것이 오래된 게시물이라는 것을 알고 있지만 누군가가 이것을 유용하게 사용할 수 있습니다.

키 이벤트가 맵핑되므로 키 코드 값을 사용하는 대신 키 값을 사용하여 좀 더 읽기 쉽게 만들 수 있습니다.

$(document).ready( function() {
    $('#searchbox input').keydown(function(e)
    {
     setTimeout(function ()
     { 
       //rather than using keyup, you can use keydown to capture 
       //the input as it's being typed.
       //You may need to use a timeout in order to allow the input to be updated
     }, 5);
    }); 
    if(e.key == "Enter")
    {
       //Enter key was pressed, do stuff
    }else if(e.key == "Spacebar")
    {
       //Spacebar was pressed, do stuff
    }
});

블로그 에서 얻은 매핑 된 키가있는 치트 시트가 있습니다. 여기에 이미지 설명을 입력하십시오


5
e.key재산 이 없습니다 .
SLaks

3
흠, IE 고유의 속성 인 것 같습니다. IE의 내 앱에서는 작동하지만 Chrome에서는 작동하지 않습니다. 내가 키 코드를 사용하고 있다고 생각합니다.
케빈

28
 // in jquery source code...
 if (!event.which && ((event.charCode || event.charCode === 0) ? event.charCode : event.keyCode)) {
     event.which = event.charCode || event.keyCode;
 }

 // So you have just to use
 $('#searchbox input').bind('keypress', function(e) {
     if (e.which === 13) {
         alert('ENTER WAS PRESSED');
     }
 });

1
이것이 실제 답변입니다. 수락 된 키는 Enter와 같은 일부 키에서는 작동하지만 다른 키에서는 실패합니다 (예 :에 의해 오인 될 수 있음)
Oscar Foley

19
이것은 jQuery 소스에서 직접 붙여 넣기이며 jQuery가 .which 이벤트 속성을 정규화하는 데 사용하는 코드입니다.
Ian Clelland

@Ian Clelland : 나는 당신의 요점을 이해할 수 없습니다, 이것이 제대로 작동합니까!? lol
Luca Filosofi

13
작동합니다. jQuery는 해당 코드를 정확하게 사용하기 때문에 확실합니다.
Ian Clelland

1
@ aSeptik : 질문은 "JQuery를 가지고 있습니다. 키를 어떻게 누르는가?"라는 대답은 jQuery가 처음에 그것을 얻는 방법을 보여줍니다. 내 요점은 jQuery에는 이미이 코드 줄이 포함되어 있기 때문에 필요하지 않다는 것입니다. 그는 그냥 사용할 수 있습니다 event.which.
Ian Clelland


14
$(document).ready(function(){
    $("#btnSubmit").bind("click",function(){$('#'+'<%=btnUpload.ClientID %>').trigger("click");return false;});
    $("body, input, textarea").keypress(function(e){
        if(e.which==13) $("#btnSubmit").click();
    });
});

이것이 당신을 도울 수 있기를 바랍니다!


12

이것은 keyCode의 전체 목록입니다.

3: "break",
8: "backspace / delete",
9: "tab",
12: 'clear',
13: "enter",
16: "shift",
17: "ctrl",
18: "alt",
19: "pause/break",
20: "caps lock",
27: "escape",
28: "conversion",
29: "non-conversion",
32: "spacebar",
33: "page up",
34: "page down",
35: "end",
36: "home ",
37: "left arrow ",
38: "up arrow ",
39: "right arrow",
40: "down arrow ",
41: "select",
42: "print",
43: "execute",
44: "Print Screen",
45: "insert ",
46: "delete",
48: "0",
49: "1",
50: "2",
51: "3",
52: "4",
53: "5",
54: "6",
55: "7",
56: "8",
57: "9",
58: ":",
59: "semicolon (firefox), equals",
60: "<",
61: "equals (firefox)",
63: "ß",
64: "@ (firefox)",
65: "a",
66: "b",
67: "c",
68: "d",
69: "e",
70: "f",
71: "g",
72: "h",
73: "i",
74: "j",
75: "k",
76: "l",
77: "m",
78: "n",
79: "o",
80: "p",
81: "q",
82: "r",
83: "s",
84: "t",
85: "u",
86: "v",
87: "w",
88: "x",
89: "y",
90: "z",
91: "Windows Key / Left ⌘ / Chromebook Search key",
92: "right window key ",
93: "Windows Menu / Right ⌘",
96: "numpad 0 ",
97: "numpad 1 ",
98: "numpad 2 ",
99: "numpad 3 ",
100: "numpad 4 ",
101: "numpad 5 ",
102: "numpad 6 ",
103: "numpad 7 ",
104: "numpad 8 ",
105: "numpad 9 ",
106: "multiply ",
107: "add",
108: "numpad period (firefox)",
109: "subtract ",
110: "decimal point",
111: "divide ",
112: "f1 ",
113: "f2 ",
114: "f3 ",
115: "f4 ",
116: "f5 ",
117: "f6 ",
118: "f7 ",
119: "f8 ",
120: "f9 ",
121: "f10",
122: "f11",
123: "f12",
124: "f13",
125: "f14",
126: "f15",
127: "f16",
128: "f17",
129: "f18",
130: "f19",
131: "f20",
132: "f21",
133: "f22",
134: "f23",
135: "f24",
144: "num lock ",
145: "scroll lock",
160: "^",
161: '!',
163: "#",
164: '$',
165: 'ù',
166: "page backward",
167: "page forward",
169: "closing paren (AZERTY)",
170: '*',
171: "~ + * key",
173: "minus (firefox), mute/unmute",
174: "decrease volume level",
175: "increase volume level",
176: "next",
177: "previous",
178: "stop",
179: "play/pause",
180: "e-mail",
181: "mute/unmute (firefox)",
182: "decrease volume level (firefox)",
183: "increase volume level (firefox)",
186: "semi-colon / ñ",
187: "equal sign ",
188: "comma",
189: "dash ",
190: "period ",
191: "forward slash / ç",
192: "grave accent / ñ / æ",
193: "?, / or °",
194: "numpad period (chrome)",
219: "open bracket ",
220: "back slash ",
221: "close bracket / å",
222: "single quote / ø",
223: "`",
224: "left or right ⌘ key (firefox)",
225: "altgr",
226: "< /git >",
230: "GNOME Compose Key",
231: "ç",
233: "XF86Forward",
234: "XF86Back",
240: "alphanumeric",
242: "hiragana/katakana",
243: "half-width/full-width",
244: "kanji",
255: "toggle touchpad"


6

다음은 다양한 브라우저의 동작에 대한 자세한 설명입니다. http://unixpapa.com/js/key.html


2
절망적 인 답변을 제공하는 데 관심이있는 모든 사람들이 반드시 읽어야하는 페이지입니다.
Tim Down

5

이 줄로 솔루션 코드를 보완 할 것 e.preventDefault();입니다. 입력 필드의 경우에 우리는 입력을 눌러 제출 참석하지 않습니다

var code = (e.keyCode ? e.keyCode : e.which);
 if(code == 13) { //Enter keycode
   e.preventDefault();
   //Do something
 }

4

숨겨진 유형을 숨기지 말고 style = "display : none"으로 일반 제출을 추가하십시오. 다음은 예제입니다 (코드에서 불필요한 속성을 제거했습니다).

<form>
  <input type="text">
  <input type="submit" style="display:none">
</form>

기본적으로 Enter 키를 허용하며 JavaScript가 필요하지 않으며 모든 브라우저에서 작동합니다.


4

다음은 누르는 엔터 키를 처리하는 jquery 확장입니다.

(function ($) {
    $.prototype.enterPressed = function (fn) {
        $(this).keyup(function (e) {
            if ((e.keyCode || e.which) == 13) {
                fn();
            }
        });
    };
}(jQuery || {}));

$("#myInput").enterPressed(function() {
    //do something
});

실제 예제는 http://jsfiddle.net/EnjB3/8/ 에서 찾을 수 있습니다.


4

마녀;)

/*
This code is for example. In real life you have plugins like :
https://code.google.com/p/jquery-utils/wiki/JqueryUtils
https://github.com/jeresig/jquery.hotkeys/blob/master/jquery.hotkeys.js
https://github.com/madrobby/keymaster
http://dmauro.github.io/Keypress/

http://api.jquery.com/keydown/
http://api.jquery.com/keypress/
*/

var event2key = {'97':'a', '98':'b', '99':'c', '100':'d', '101':'e', '102':'f', '103':'g', '104':'h', '105':'i', '106':'j', '107':'k', '108':'l', '109':'m', '110':'n', '111':'o', '112':'p', '113':'q', '114':'r', '115':'s', '116':'t', '117':'u', '118':'v', '119':'w', '120':'x', '121':'y', '122':'z', '37':'left', '39':'right', '38':'up', '40':'down', '13':'enter'};

var documentKeys = function(event) {
    console.log(event.type, event.which, event.keyCode);

    var keycode = event.which || event.keyCode; // par exemple : 112
    var myKey = event2key[keycode]; // par exemple : 'p'

    switch (myKey) {
        case 'a':
            $('div').css({
                left: '+=50'
            });
            break;
        case 'z':
            $('div').css({
                left: '-=50'
            });
            break;
        default:
            //console.log('keycode', keycode);
    }
};

$(document).on('keydown keyup keypress', documentKeys);

데모 : http://jsfiddle.net/molokoloco/hgXyq/24/


4

event.key현대 JS를 사용하십시오 !

더 이상 숫자 코드가 없습니다. 키를 직접 확인할 수 있습니다. 예를 들어 "Enter", "LeftArrow", "r", 또는 "R".

const input = document.getElementById("searchbox");
input.addEventListener("keypress", function onEvent(event) {
    if (event.key === "Enter") {
        // Submit
    }
    else if (event.key === "Q") {
        // Play quacking duck sound, maybe...
    }
});

모질라 문서

지원되는 브라우저


3
$(document).bind('keypress', function (e) {
    console.log(e.which);  //or alert(e.which);

});

콘솔에서 결과를 보려면 firbug가 있어야합니다


3

일부 브라우저는 keyCode를 사용하고 다른 브라우저는 keyCode를 사용합니다. jQuery를 사용하는 경우 jQuery가 표준화하는 것을 안정적으로 사용할 수 있습니다. 사실은,

$('#searchbox input').bind('keypress', function(e) {
    if(e.keyCode==13){

    }
});

2

킬리안의 답변에 따르면 :

키 누르기 만 입력 해야하는 경우 :

<form action="javascript:alert('Enter');">
<input type=text value="press enter">
</form>

2

가장 쉬운 방법은 다음과 같습니다.

$("#element").keydown(function(event) {
    if (event.keyCode == 13) {
        localiza_cep(this.value);
    }
});

1
event.which대신에 사용 하는 것이 좋습니다 event.keyCode. 에서 의 jQuery API :The event.which property normalizes event.keyCode and event.charCode. It is recommended to watch event.which for keyboard key input.
zanetu

2

jQuery 용 플러그인을 만들었습니다. keypress 이벤트 . 번호를 찾아서 입력하는 대신 다음과 같이하면됩니다.

사용 방법

  1. 아래 코드를 포함하십시오
  2. 이 코드를 실행하십시오 :
$(document).keydown(function(e) {
    if (getPressedKey(e) == theKeyYouWantToFireAPressEventFor /*Add 'e.ctrlKey here to only fire if the combo is CTRL+theKeyYouWantToFireAPressEventFor'*/) {
        // Your Code To Fire When You Press theKeyYouWantToFireAPressEventFor 
    }
});

그렇게 간단합니다. 그주의 사항 theKeyYouWantToFireAPressEventFor입니다 하지 수 있지만, 문자열 (예 : "a"화재 A, 눌렀을 "ctrl"때 불에 숫자 단지의 경우, 누르거나 , 따옴표. 그 때이 해고 를 누르면됩니다.)CTRL (control)11

예제 / 코드 :

긴 버전이 너무 길기 때문에 ... 음 ... 긴, 그것을 위해 PasteBin 링크를 만들었습니다 :
http://pastebin.com/VUaDevz1


수백만 개의 "if"비교 (> jsfiddle.net/BlaM/bcguctrx)를 사용하지 않으면 기능을 더 짧고 빠르게 만들 수 있습니다 . 독일어 키보드.
BlaM

이 솔루션이 마음에 들었습니다. 좋은.
Jay


-9

이 시도:

jQuery('#myInput').keypress(function(e) {
    code = e.keyCode ? e.keyCode : e.which;
    if(code.toString() == 13) {
        alert('You pressed enter!');
    }
});
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.