Обработка парного кода с номером клавиатуры Javascript
Я пытаюсь разобрать события keydown с цифровой клавиатуры со следующим:
$('#myDiv').keydown(function(e) {
val = String.fromCharCode(e.which)
});
Проблема в том, что клавиатура 0-9
возвращает keyCodes 96-105
, которая, согласно fromCharCode()
, является строчными буквами a-i
. Как получить события смены клавиатуры на числовой панели для разрешения соответствующего номера?
Ответы
Ответ 1
У вас нет: вы используете событие keypress
. Событие keypress
- это единственное событие, которое даст вам достоверную информацию о типизированных символах. Ваш существующий код будет работать, если вы просто измените keydown
на keypress
.
Ответ 2
Значение which
, переданное в keydown
, не является символьным кодом; это key code (и коды меняются от браузера/ОС к браузеру/ОС). Вы можете сопоставить его с символом, используя таблицы на этой странице, но сказать, что этот материал немного... неудобен... будет быть заниженным.: -)
В противном случае лучше всего подождать событие keypress
, которое будет иметь код символа (если это необходимо), а не key code.
Пример: Живая копия | Live source
jQuery(function($) {
$("#theField")
.keydown(function(event) {
showKey("keydown", event.which);
})
.keypress(function(event) {
showKey("keypress", event.which);
})
.focus();
function showKey(eventName, which) {
display(eventName +
": " + which + " (" +
String.fromCharCode(which) + ")");
}
function display(msg) {
$("<p>").html(msg).appendTo(document.body);
}
});
С помощью этого HTML:
<input type="text" id="theField">
Ответ 3
Существует способ сделать это с помощью keydown, если keypress не работает из-за необходимости отмены событий и т.д. Используйте инструкцию if() с этим тестом:
parseInt(event.keyIdentifier.substring(2),16) > 47 && parseInt(event.keyIdentifier.substring(2),16) < 58
ИЛИ, с событиями jQuery:
parseInt(event.originalEvent.keyIdentifier.substring(2),16) > 47 && parseInt(event.originalEvent.keyIdentifier.substring(2),16) < 58
В этих примерах предполагается, что "событие" - это событие keydown. keyIdentifier - это шестнадцатеричное число, которое представляет значение unicode для соответствующего char. Используя keyIdentifier, цифры с цифровой клавиатуры и клавиатуры, а числа над клавиатурой QWERTY будут иметь одинаковые значения, 48 - 57 (U + 0030 - U + 0039), даже с событием keyDown.
Значения Unicode в браузерах будут выглядеть как U + 0030 или U + 002F. Разберите эту строку, чтобы получить только шестнадцатеричное значение, затем используйте parseInt() с радиусом 16, чтобы преобразовать его в base-10.
Ответ 4
Ответы здесь устарели, потому что KeyboardEvent.which, KeyboardEvent.keyCode и KeyboardEvent.charCode устарели.
Правильный способ для последних версий Firefox, Chrome, IE/Edge и Safari для получения символьного ключа - использовать KeyboardEvent.key и он должен работать с любым ключевым событием, а не только с keypress
.
Совместимость браузера KeyboardEvent.key
document.
querySelector('input').
addEventListener('keydown', event => console.log(event.key));
<input placeholder="Start typing...">
Ответ 5
вы можете использовать keydown и обнаруживать клавиши numpad. Я сделал это, используя следующий код. Вычитайте 48 из клавиш numpad перед интерпретацией клавиши
function navigate(e) {
var keyCode = e.keyCode || e.which;
if (keyCode >= 96 && keyCode <= 105) {
// Numpad keys
keyCode -= 48;
}
var txtVal = String.fromCharCode(keyCode);