Действие нажатием клавиши
Я разрабатываю бухгалтерское программное обеспечение на основе Интернета. Я хотел бы открыть "новый бухгалтерский документ" всякий раз, когда пользователь нажимает клавишу 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"
}
});