web-dev-qa-db-ja.com

JS/jQueryでの矢印キーのバインド

JavascriptやjQueryで左右の矢印キーに関数をバインドする方法は?私はjQueryのjs-hotkeyプラグインを調べました(特定のキーを認識するための引数を追加するために組み込みのbind関数をラップしました)が、それは矢印キーをサポートしていないようです。

400
Alex S
$(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.keye.whichの代わりに e.keyCode を使うことができます。 e.keyは推奨される標準になりつつあり、'ArrowLeft''ArrowUp''ArrowRight''ArrowDown'の文字列をチェックすることができます。新しいブラウザはネイティブにサポートしています、 ここでチェックしてください

507
Sygmoral
$(document).keydown(function(e){
    if (e.which == 37) { 
       alert("left pressed");
       return false;
    }
});

文字コード

37 - 左

38 - アップ

39 - 右

40 - 下

446
Josh

あなたは矢印キーの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;
  }
});

上記の例を確認してください ここ

103
CMS

これは少し遅れていますが、HotKeysには、1つの要素に複数のホットキーをアタッチするとイベントが複数回実行されるという非常に大きなバグがあります。普通のjQueryを使うだけです。

$(element).keydown(function(ev) {
    if(ev.which == $.ui.keyCode.DOWN) {
        // your code
        ev.preventDefault();
    }
});
23
mackstann

私は他の答えからの最良のビットを単に組み合わせました:

$(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();
});
16
matt burns

あなたは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/

14
Robert Hurst

単純な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 も参照してください。

12
1''

JQuery.HotKeysが矢印キーをサポートしていませんか? IE7、Firefox 3.5.2、およびGoogle Chrome 2.0.172でテストしたときに、以前デモで戸惑い、上下左右の動作を確認しました。

_ edit _ :jquery.hotkeysがGithubに移動されたようです: https://github.com/jeresig/jquery.hotkeys

9
Pandincus

上記の例のようにreturn false;を使う代わりに、e.preventDefault();を使うこともできます。

5
Gaetan

左右に移動する純粋なjsの例

        window.addEventListener('keydown', function (e) {
            // go to the right
            if (e.keyCode == 39) {

            }
            // go to the left
            if (e.keyCode == 37) {

            }
        });
4
Vince Verhoeven

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');
    }
});
3

arrow keyが押されているかどうかを確認できます。

$(document).keydown(function(e){
    if (e.keyCode > 36 && e.keyCode < 41) { 
       alert( "arrowkey pressed" );
       return false;
    }
});
2
suhailvs

キーボード入力と入力されたキーの組み合わせをキャプチャするための堅牢な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
    }
});
0
小弟调调

ユーザーが入力にフォーカスしているときに矢印キーを使用して数値入力を+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);
    }
}); 
0
Scott

矢印は他のどのSELECTオブジェクトに対しても使用できないようにします。実際には別のオブジェクトLOLをテストしていません。しかし、それはページと入力タイプでarrowイベントを止めることができます。

"kepress"、 "keydown"、 "keyup"イベントで "e.preventDefault()"や "return false"を使ってSELECTオブジェクトの値を変更するためにすでに左右の矢印をブロックしようとしていますが、それでもオブジェクトの値は変わります。しかし、イベントはまだ矢印が押されたことをあなたに伝えます。

0
phoenixs