Действие нажатием клавиши

Я разрабатываю бухгалтерское программное обеспечение на основе Интернета. Я хотел бы открыть "новый бухгалтерский документ" всякий раз, когда пользователь нажимает клавишу N, например. И открывать "настройки" всякий раз, когда он / она нажимает клавишу S.

Я видел несколько скриптов, основанных на JavaScript и jQuery. Но они не работали точно. Кто-нибудь может мне помочь?

Я попробовал этот скрипт:

var code = (e.keyCode ? e.keyCode : e.which);
if(code == 13) { //Enter keycode
   //Do something
}

4 ответа

Решение
$(document).bind('keyup', function(e){
    if(e.which==78) {
      // "n"
    }
    if(e.which==83) {
      // "s"
    }
});

Чтобы предотвратить фокусировку ввода:

$("body").on("focus",":input", function(){ $(document).unbind('keyup'); });
$("body").on("blur",":input", function(){ $(document).bind('keyup', function(e){ etc.... });

Вы можете поставить bind функция в свою собственную функцию, чтобы вы не дублировать код. например:

function bindKeyup(){
    $(document).bind('keyup', function(e){
      if(e.which==78) {
        // "n"
      }
      if(e.which==83) {
        // "s"
      }
    });
}
$("body").on("focus",":input", function(){ $(document).unbind('keyup'); });
$("body").on("blur",":input", function(){ bindKeyup(); });

Вы можете обнаружить нажатия клавиш в jQuery, используя методы.keypress() или .keyup(), вот краткий пример:

$(document).keyup(function(event) { // the event variable contains the key pressed
 if(event.which == 78) { // N keycode
   //Do something
 }
});

Вот список кодов клавиш: http://www.cambiaresearch.com/articles/15/javascript-char-codes-key-codes

Обновление 1

.keyup и.keydown оказывают различное влияние - согласно комментариям @ThomasClayson -: keyup - лучший вариант, так как нажатие клавиши будет повторяться, если удерживать клавишу нажатой. он регистрирует событие для каждого вставленного символа. Он также не регистрирует клавиши-модификаторы, такие как shift (хотя в этом нет необходимости, это может быть что-то, что нужно иметь в виду)

Обновление 2

Это с сайта документации по jQuery keyup:

Чтобы определить, какая клавиша была нажата, изучите объект события, который передается в функцию-обработчик. Хотя браузеры используют разные свойства для хранения этой информации, jQuery нормализует свойство.which, чтобы вы могли надежно использовать его для получения кода ключа. Этот код соответствует клавише на клавиатуре, включая коды для специальных клавиш, таких как стрелки.

Аффективно означает, что which.event это все, что вам нужно, чтобы определить, какой ключ был использован. Спасибо @nnnnnn

Вы должны прочитать на .keyCode() атрибут объекта события. Вы можете запросить это, чтобы узнать, какая клавиша была нажата, и действовать соответственно. Я бы также предложил вам добавить клавиши-модификаторы к вашим ярлыкам, таким как Shift или Alt, чтобы, когда кто-то невинно печатал ввод, панель не появлялась. В приведенном ниже примере я использовал Shift

$(document).keyup(function(e) {
    if (e.shiftKey) {
        switch(e.keyCode ? e.keyCode : e.which) {
            case 78: // N pressed
                myNPressedHandler();
                break;
            case 83: // S pressed
                mySPressedHandler();
                break;
        }
    }
} 
$(document).bind('keypress', function(e) {
    var keycode= (e.keyCode ? e.keyCode : e.which);
       if(keyCode==78) {
      // "n"
    }else if(keyCode==83) {
      // "s"
    }

});
Другие вопросы по тегам