действие нажатием клавиши - PullRequest
5 голосов
/ 28 ноября 2011

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

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

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

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

Ответы [ 4 ]

6 голосов
/ 28 ноября 2011
$(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(); });
3 голосов
/ 28 ноября 2011

Вы можете обнаружить нажатия клавиш в 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.event - это все, что вам нужно, чтобы определить, какой ключ был использован. Спасибо @ nnnnnn

2 голосов
/ 28 ноября 2011

Вам необходимо прочитать атрибут .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;
        }
    }
} 
0 голосов
/ 28 ноября 2011
$(document).bind('keypress', function(e) {
    var keycode= (e.keyCode ? e.keyCode : e.which);
       if(keyCode==78) {
      // "n"
    }else if(keyCode==83) {
      // "s"
    }

});
...