JavascriptやjQueryで左右の矢印キーに関数をバインドする方法は?私はjQueryのjs-hotkeyプラグインを調べました(特定のキーを認識するための引数を追加するために組み込みのbind関数をラップしました)が、それは矢印キーをサポートしていないようです。
$(document).keydown(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)
});
対応するcase
行とbreak
行の間に矢印キーのカスタムコードを入れます。
e.which
はjQueryによって正規化されているため、すべてのブラウザで機能します。純粋なJavaScriptアプローチの場合は、最初の2行を次のように置き換えます。
document.onkeydown = function(e) {
e = e || window.event;
switch(e.which || e.keyCode) {
(編集2017)
気になる人は、e.key
やe.which
の代わりに e.keyCode
を使うことができます。 e.key
は推奨される標準になりつつあり、'ArrowLeft'
、'ArrowUp'
、'ArrowRight'
、'ArrowDown'
の文字列をチェックすることができます。新しいブラウザはネイティブにサポートしています、 ここでチェックしてください 。
$(document).keydown(function(e){
if (e.which == 37) {
alert("left pressed");
return false;
}
});
文字コード
37 - 左
38 - アップ
39 - 右
40 - 下
あなたは矢印キーの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;
}
});
上記の例を確認してください ここ 。
これは少し遅れていますが、HotKeysには、1つの要素に複数のホットキーをアタッチするとイベントが複数回実行されるという非常に大きなバグがあります。普通の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;
}
};
https://stackoverflow.com/a/17929007/1397061 も参照してください。
JQuery.HotKeysが矢印キーをサポートしていませんか? IE7、Firefox 3.5.2、およびGoogle Chrome 2.0.172でテストしたときに、以前デモで戸惑い、上下左右の動作を確認しました。
_ edit _ :jquery.hotkeysがGithubに移動されたようです: https://github.com/jeresig/jquery.hotkeys
上記の例のようにreturn false;
を使う代わりに、e.preventDefault();
を使うこともできます。
左右に移動する純粋な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');
}
});
arrow key
が押されているかどうかを確認できます。
$(document).keydown(function(e){
if (e.keyCode > 36 && e.keyCode < 41) {
alert( "arrowkey pressed" );
return false;
}
});
キーボード入力と入力されたキーの組み合わせをキャプチャするための堅牢な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);
}
});
矢印は他のどのSELECTオブジェクトに対しても使用できないようにします。実際には別のオブジェクトLOLをテストしていません。しかし、それはページと入力タイプでarrowイベントを止めることができます。
"kepress"、 "keydown"、 "keyup"イベントで "e.preventDefault()"や "return false"を使ってSELECTオブジェクトの値を変更するためにすでに左右の矢印をブロックしようとしていますが、それでもオブジェクトの値は変わります。しかし、イベントはまだ矢印が押されたことをあなたに伝えます。