回答:
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
に、数値と比較します(はるかに高速)。
$.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/event.which
これは少し遅いですが、HotKeysには非常に大きなバグがあり、要素に複数のホットキーをアタッチすると、イベントが複数回実行されます。プレーンな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/
プレーンなJavascriptを使用した簡潔なソリューション(提案された改善について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、Google Chrome 2.0.172でテストしたときに、左、右、上、下の動作を観察しました...
編集:jquery.hotkeysがGithubに再配置されたようです:https://github.com/jeresig/jquery.hotkeys
右または左に行く純粋なjsの例
window.addEventListener('keydown', function (e) {
// go to the right
if (e.keyCode == 39) {
}
// go to the left
if (e.keyCode == 37) {
}
});
jQuery bindを使用できます。
$(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);
}
});