답변:
document.onkeydown = function(e) {
switch(e.which) {
case 37: // left
break;
case 38: // up
break;
case 39: // right
break;
case 40: // down
break;
default: return; // exit this handler for other keys
}
e.preventDefault(); // prevent the default action (scroll / move caret)
};
IE8을 지원해야하는 경우 함수 본문을로 시작하십시오 e = e || window.event; switch(e.which || e.keyCode) {
.
(편집 2020)
참고 KeyboardEvent.which
지금은 사용되지 않습니다. 화살표 키를 감지하는보다 현대적인 솔루션을 사용하여이 예제를KeyboardEvent.key
참조하십시오 .
e.which
jQuery를 등 사용, 크로스 브라우저를위한 권장 e.preventDefault()
대신 return false
( return false
JQuery와 이벤트 핸들러를 트리거 모두 e.preventDefault()
와 e.stopPropagation()
이벤트가 그들에게 전파되지 않기 때문에 이후 추가 이벤트가 실패 할 것입니다 두 번째있는), 그리고에 스위치의 끝은 다른 키 사용을 방해하지 않기 위해 찾고있는 키가 아닌 다른 키이면 호출 하지 않고 반환 e.preventDefault()
되며 대신 $.ui.keyCode.DOWN
숫자 와 비교합니다 (MUCH 빠름).
$.ui.keyCode.DOWN
당신을 찾아 $
, 그것을 찾는 수준을 올라가고 ... 찾고, 당신의 어휘 범위에 포함되지 $
전역 범위에서까지 반복, 세계에서 찾을 window
액세스 $
, 액세스 창 ui
에 window.$
액세스 keyCode
에 window.$.ui
액세스 DOWN
에가 window.$.ui.keyCode
비교하려는 프리미티브 값에 도착, 후 비교 실제 작업을 수행. 그 속도가 당신에게 중요한지 아닌지는 개인적인 결정이지만, 나는 단지 기본 요소를 쉽게 쓰거나 주석을 달 수있는 상황이있을 때 4 단계의 접근을 피하는 경향이 있습니다.
$(document).keydown(function(e){
if (e.which == 37) {
alert("left pressed");
return false;
}
});
문자 코드 :
37-왼쪽
38-위로
39-오른쪽
40-아래로
e.which
하는 경우 e.keyCode
더 많은 브라우저 지원 보다는 사용하십시오 . 아래 내 의견을 참조하십시오.
화살표 키의 keyCode를 사용할 수 있습니다 (왼쪽, 위, 오른쪽 및 아래의 경우 37, 38, 39 및 40).
$('.selector').keydown(function (e) {
var arrow = { left: 37, up: 38, right: 39, down: 40 };
switch (e.which) {
case arrow.left:
//..
break;
case arrow.up:
//..
break;
case arrow.right:
//..
break;
case arrow.down:
//..
break;
}
});
위의 예를 확인 하십시오 .
The event.which property normalizes event.keyCode and event.charCode
- api.jquery.com
이것은 약간 늦었지만 핫키에는 매우 큰 버그가있어 하나 이상의 핫키를 요소에 연결하면 이벤트가 여러 번 실행됩니다. 일반 jQuery를 사용하십시오.
$(element).keydown(function(ev) {
if(ev.which == $.ui.keyCode.DOWN) {
// your code
ev.preventDefault();
}
});
나는 단순히 다른 답변에서 최고의 비트를 결합했습니다.
$(document).keydown(function(e){
switch(e.which) {
case $.ui.keyCode.LEFT:
// your code here
break;
case $.ui.keyCode.UP:
// your code here
break;
case $.ui.keyCode.RIGHT:
// your code here
break;
case $.ui.keyCode.DOWN:
// your code here
break;
default: return; // allow other keys to be handled
}
// prevent default action (eg. page moving up/down)
// but consider accessibility (eg. user may want to use keys to choose a radio button)
e.preventDefault();
});
KeyboardJS를 사용할 수 있습니다. 나는 이와 같은 작업을 위해 라이브러리를 작성했습니다.
KeyboardJS.on('up', function() { console.log('up'); });
KeyboardJS.on('down', function() { console.log('down'); });
KeyboardJS.on('left', function() { console.log('right'); });
KeyboardJS.on('right', function() { console.log('left'); });
라이브러리를 확인하십시오 => http://robertwhurst.github.com/KeyboardJS/
일반 자바 스크립트를 사용하는 간결한 솔루션 (제안 된 개선을 위해 Sygmoral에 감사) :
document.onkeydown = function(e) {
switch (e.keyCode) {
case 37:
alert('left');
break;
case 39:
alert('right');
break;
}
};
document.addEventListener('keydown', myFunction);
jQuery.HotKeys가 화살표 키를 지원하지 않습니까? IE7, Firefox 3.5.2 및 Chrome 2.0.172에서 테스트했을 때 왼쪽, 오른쪽, 위 및 아래로 작동하는 것을 관찰하기 전에 데모를 엉망으로 만들었습니다 ...
편집 : jquery.hotkeys가 Github로 재배치 된 것으로 보입니다 : https://github.com/jeresig/jquery.hotkeys
jQuery 바인드를 사용할 수 있습니다.
$(window).bind('keydown', function(e){
if (e.keyCode == 37) {
console.log('left');
} else if (e.keyCode == 38) {
console.log('up');
} else if (e.keyCode == 39) {
console.log('right');
} else if (e.keyCode == 40) {
console.log('down');
}
});
키보드 입력 및 입력 된 키 조합을 캡처하기위한 강력한 Javascript 라이브러리 종속성이 없습니다.
http://jaywcjlove.github.io/hotkeys/
hotkeys('right,left,up,down', function(e, handler){
switch(handler.key){
case "right":console.log('right');break
case "left":console.log('left');break
case "up":console.log('up');break
case "down":console.log('down');break
}
});
입력에 집중할 때 화살표 키를 사용하여 숫자 입력을 +1 또는 -1하는 간단한 방법을 찾고 왔습니다. 나는 좋은 대답을 찾지 못했지만 다음 코드를 훌륭하게 작동시켜 사이트 전체에 적용했습니다.
$("input").bind('keydown', function (e) {
if(e.keyCode == 40 && $.isNumeric($(this).val()) ) {
$(this).val(parseFloat($(this).val())-1.0);
} else if(e.keyCode == 38 && $.isNumeric($(this).val()) ) {
$(this).val(parseFloat($(this).val())+1.0);
}
});