답변:
화살표 키를은으로 트리거 onkeydown
하지 onkeypress
.
키코 드는 다음과 같습니다.
53
와 keydown
이벤트입니다. 당신 은 다른 것을 얻 37
습니다keypress
onkeyup
이벤트를 듣고 중지합니다. 그러나 실제로는 자바 스크립트로 UI 동작을 수정해서는 안됩니다.
키 업 및 다운 콜 기능. 각 키마다 다른 코드가 있습니다.
document.onkeydown = checkKey;
function checkKey(e) {
e = e || window.event;
if (e.keyCode == '38') {
// up arrow
}
else if (e.keyCode == '40') {
// down arrow
}
else if (e.keyCode == '37') {
// left arrow
}
else if (e.keyCode == '39') {
// right arrow
}
}
e = e ? e : window.event;
또는 :if (typeof(e) === "undefined") { e = window.event; }
keyCode === 32
아닌 것처럼 확인해야한다는 것 입니다. keyCode == '32'
keyCode === '32'
더 최근의 훨씬 더 깨끗한 : use event.key
. 더 이상 임의의 숫자 코드가 없습니다! 번역하고 있거나 사용자가 최신 브라우저를 사용하고 있다는 것을 알고 있다면 이것을 사용하십시오!
node.addEventListener('keydown', function(event) {
const key = event.key; // "ArrowRight", "ArrowLeft", "ArrowUp", or "ArrowDown"
});
자세한 처리 :
switch (event.key) {
case "ArrowLeft":
// Left pressed
break;
case "ArrowRight":
// Right pressed
break;
case "ArrowUp":
// Up pressed
break;
case "ArrowDown":
// Down pressed
break;
}
이를 확인 "w", "a", "s", "d"
하거나 다른 키 를 쉽게 확장 할 수 있습니다.
PS event.code
는 화살표 와 동일
key
하지 keyCode
사용되지 않습니다 그.
아마도 가장 까다로운 공식 :
document.onkeydown = function(e) {
switch (e.keyCode) {
case 37:
alert('left');
break;
case 38:
alert('up');
break;
case 39:
alert('right');
break;
case 40:
alert('down');
break;
}
};
데모 (사용자 Angus Grant에게 감사드립니다) : http://jsfiddle.net/angusgrant/E3tE6/
브라우저 간 작동해야합니다. 작동하지 않는 브라우저가 있으면 의견을 남겨주십시오.
키 코드 (예 : e.charCode 및 e 대신 window.event)를 얻는 다른 방법이 있지만 필요하지는 않습니다. http://www.asquare.net/javascript/tests/KeyCode.html 에서 대부분을 시험해 볼 수 있습니다 . event.keycode는 Firefox에서 onkeypress와는 작동하지 않지만 onkeydown과는 작동합니다.
화살표 키와 같이 인쇄 할 수없는 키 keydown
에는 사용 하지 마십시오 keypress
.
function checkKey(e) {
e = e || window.event;
alert(e.keyCode);
}
document.onkeydown = checkKey;
내가 찾은 최고의 JavaScript 키 이벤트 참조 (예 : quirksmode에서 바지를 치는)는 다음과 같습니다. http://unixpapa.com/js/key.html
가장 최근의 방법은 다음과 같습니다.
document.addEventListener("keydown", function(event) {
event.preventDefault();
const key = event.key; // "ArrowRight", "ArrowLeft", "ArrowUp", or "ArrowDown"
switch (key) { // change to event.key to key to use the above variable
case "ArrowLeft":
// Left pressed
<do something>
break;
case "ArrowRight":
// Right pressed
<do something>
break;
case "ArrowUp":
// Up pressed
<do something>
break;
case "ArrowDown":
// Down pressed
<do something>
break;
}
});
이것은 개발자가 코드가 페이지의 어느 곳에서나 활성화되기를 원하고 클라이언트는 다른 키 누름을 무시해야한다고 가정합니다. event.preventDefault ()를 제거하십시오. 이 핸들러에 의해 포착 된 키를 포함하여 키 누르기가 여전히 활성화되어 있어야합니다.
구현 예는 다음과 같습니다.
var targetElement = $0 || document.body;
function getArrowKeyDirection (keyCode) {
return {
37: 'left',
39: 'right',
38: 'up',
40: 'down'
}[keyCode];
}
function isArrowKey (keyCode) {
return !!getArrowKeyDirection(keyCode);
}
targetElement.addEventListener('keydown', function (event) {
var direction,
keyCode = event.keyCode;
if (isArrowKey(keyCode)) {
direction = getArrowKeyDirection(keyCode);
console.log(direction);
}
});
var targetElement = typeof $0 !== 'undefined' ? $0 : document.body;
하거나 단지 : var targetElement = document.body;
괜찮습니다
내가 한 방법은 다음과 같습니다.
var leftKey = 37, upKey = 38, rightKey = 39, downKey = 40;
var keystate;
document.addEventListener("keydown", function (e) {
keystate[e.keyCode] = true;
});
document.addEventListener("keyup", function (e) {
delete keystate[e.keyCode];
});
if (keystate[leftKey]) {
//code to be executed when left arrow key is pushed.
}
if (keystate[upKey]) {
//code to be executed when up arrow key is pushed.
}
if (keystate[rightKey]) {
//code to be executed when right arrow key is pushed.
}
if (keystate[downKey]) {
//code to be executed when down arrow key is pushed.
}
나는 jQuery로 그들을 붙잡을 수 있었다 :
$(document).keypress(function (eventObject) {
alert(eventObject.keyCode);
});
keypress
화살표 키로는 작동하지 않습니다. $(document).on('keydown', function() {...})
대신 사용해야 합니다
크롬과 파이어 폭스의 작동 코드입니다.
<html>
<head>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.1/jquery.min.js"></script>
<script type="text/javascript">
function leftArrowPressed() {
alert("leftArrowPressed" );
window.location = prevUrl
}
function rightArrowPressed() {
alert("rightArrowPressed" );
window.location = nextUrl
}
function topArrowPressed() {
alert("topArrowPressed" );
window.location = prevUrl
}
function downArrowPressed() {
alert("downArrowPressed" );
window.location = nextUrl
}
document.onkeydown = function(evt) {
var nextPage = $("#next_page_link")
var prevPage = $("#previous_page_link")
nextUrl = nextPage.attr("href")
prevUrl = prevPage.attr("href")
evt = evt || window.event;
switch (evt.keyCode) {
case 37:
leftArrowPressed(nextUrl);
break;
case 38:
topArrowPressed(nextUrl);
break;
case 39:
rightArrowPressed(prevUrl);
break;
case 40:
downArrowPressed(prevUrl);
break;
}
};
</script>
</head>
<body>
<p>
<a id="previous_page_link" href="http://www.latest-tutorial.com">Latest Tutorials</a>
<a id="next_page_link" href="http://www.zeeshanakhter.com">Zeeshan Akhter</a>
</p>
</body>
</html>
더 짧습니다.
function IsArrows (e) {
return (e.keyCode >= 37 && e.keyCode <= 40);
}
if ([37,38,39,40].indexOf(e.keyCode)!=-1){ console.log('arrow pressed') }
이 도서관은 흔들린다! https://craig.is/killing/mice
Mousetrap.bind('up up down down left right left right b a enter', function() {
highlight([21, 22, 23]);
});
그래도 해당 페이지의 코드를 강조 표시하려면 시퀀스를 약간 빠르게 눌러야합니다.
화살표 키는 키 업시 트리거됩니다
$(document).on("keyup", "body", function(e) {
if (e.keyCode == 38) {
// up arrow
console.log("up arrow")
}
if (e.keyCode == 40) {
// down arrow
console.log("down arrow")
}
if (e.keyCode == 37) {
// left arrow
console.log("lefy arrow")
}
if (e.keyCode == 39) {
// right arrow
console.log("right arrow")
}
})
onkeydown은 ctrl, alt, shits를 허용합니다
onkeyup은 탭, 위쪽 화살표, 아래쪽 화살표, 왼쪽 화살표, 아래쪽 화살표를 허용합니다
jquery를 사용하면 다음과 같이 할 수도 있습니다.
$(document).on("keydown", '.class_name', function (event) {
if (event.keyCode == 37) {
console.log('left arrow pressed');
}
if (event.keyCode == 38) {
console.log('up arrow pressed');
}
if (event.keyCode == 39) {
console.log('right arrow pressed');
}
if (event.keyCode == 40) {
console.log('down arrow pressed');
}
});
와 키 와 ES6.
스위치를 사용하지 않고 각 화살표 키에 대해 별도의 기능을 제공하며 NumLock
켜져 있을 때 숫자 키패드의 2,4,6,8 키와도 작동 합니다.
const element = document.querySelector("textarea"),
ArrowRight = k => {
console.log(k);
},
ArrowLeft = k => {
console.log(k);
},
ArrowUp = k => {
console.log(k);
},
ArrowDown = k => {
console.log(k);
},
handler = {
ArrowRight,
ArrowLeft,
ArrowUp,
ArrowDown
};
element.addEventListener("keydown", e => {
const k = e.key;
if (handler.hasOwnProperty(k)) {
handler[k](k);
}
});
<p>Click the textarea then try the arrows</p>
<textarea></textarea>
keypress
화살표 키에 대한 이벤트를 트리거 하지만keydown
항상 화살표 키에서 작동 하는 것이 맞습니다 .