Связывание клавиш со стрелками в JS / jQuery - PullRequest
403 голосов
/ 10 сентября 2009

Как мне связать функцию с клавишами со стрелками влево и вправо в Javascript и / или jQuery? Я посмотрел на плагин js-hotkey для jQuery (оборачивает встроенную функцию связывания, чтобы добавить аргумент для распознавания определенных клавиш), но, похоже, он не поддерживает клавиши со стрелками.

Ответы [ 16 ]

512 голосов
/ 16 мая 2011
$(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 замените первые две строки на:

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'. Новые браузеры поддерживают его изначально, проверьте здесь .

446 голосов
/ 10 сентября 2009
$(document).keydown(function(e){
    if (e.which == 37) { 
       alert("left pressed");
       return false;
    }
});

Коды символов:

37 - слева

38 - вверх

39 - справа

40 - вниз

103 голосов
/ 10 сентября 2009

Вы можете использовать код клавиши клавиш со стрелками (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;
  }
});

Проверьте приведенный выше пример здесь .

23 голосов
/ 25 июля 2010

Это немного поздно, но у HotKeys есть очень серьезная ошибка, которая приводит к тому, что события выполняются несколько раз, если вы присоединяете более одной горячей клавиши к элементу. Просто используйте простой jQuery.

$(element).keydown(function(ev) {
    if(ev.which == $.ui.keyCode.DOWN) {
        // your code
        ev.preventDefault();
    }
});
16 голосов
/ 16 октября 2012

Я просто объединил лучшие биты из других ответов:

$(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();
});
14 голосов
/ 03 ноября 2012

Вы можете использовать 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/

12 голосов
/ 29 июля 2013

Краткое решение с использованием простого 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.

9 голосов
/ 10 сентября 2009

Вы уверены, что jQuery.HotKeys не поддерживает клавиши со стрелками? Я уже порвал их демо и наблюдал, как они работают влево, вправо, вверх и вниз, когда я тестировал их в IE7, Firefox 3.5.2 и Google Chrome 2.0.172 ...

РЕДАКТИРОВАТЬ : Похоже, jquery.hotkeys был перемещен в Github: https://github.com/jeresig/jquery.hotkeys

5 голосов
/ 16 февраля 2011

Вместо использования return false;, как в примерах выше, вы можете использовать e.preventDefault();, который делает то же самое, но легче для понимания и чтения.

4 голосов
/ 18 августа 2017

Пример чистого js с движением вправо или влево

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

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

            }
        });
...