Я хотел бы узнать диапазон (диапазоны) JavaScript keyCode
, которые соответствуют вводимым символам; или, альтернативно, диапазон непечатаемых (управляющих) символов, таких как backspace, escape, command, shift и т.д., чтобы я мог их игнорировать.
Причина, по которой я спрашиваю, - вызов String.fromCharCode()
приводит к странным символам для управляющих клавиш. Например, я получаю "[" для левой команды, "%" для стрелки влево. Вот такие странности.
Keydown выдаст вам KeyCode нажатой клавиши без каких-либо модификаций.
$("#keypresser").keydown(function(e){
var keycode = e.keyCode;
var valid =
(keycode > 47 && keycode < 58) || // number keys
keycode == 32 || keycode == 13 || // spacebar & return key(s) (if you want to allow carriage returns)
(keycode > 64 && keycode < 91) || // letter keys
(keycode > 95 && keycode < 112) || // numpad keys
(keycode > 185 && keycode < 193) || // ;=,-./` (in order)
(keycode > 218 && keycode < 223); // [\]' (in order)
return valid;
});
Только цифровые, буквенные клавиши и пробел будут иметь коды клавиш, соответствующие String.fromCharCode
, поскольку он использует значения Unicode.
Нажатие клавиш будет представлением введенного текста в кодировке charCode. Обратите внимание, что это событие не произойдет, если текст не будет "напечатан" в результате нажатия клавиши.
$("#keypresser").keypress(function(e){
var charcode = e.charCode;
var char = String.fromCharCode(charcode);
console.log(char);
});
KeyUp ведет себя аналогично KeyDown.
Для справки: событие "keypress" будет передавать вам свойство charCode всякий раз, когда вы нажимаете символьную клавишу.
Editor.addEventListener('keypress', function(event){
if (event.charCode) {
//// character key
console.log( String.fromCharCode(event.charCode) ); /// convert charCode to intended character.
} else {
//// control key
}
Однако событие "keypress" не фиксирует каждое нажатие клавиши - несколько клавиш срабатывают до события "keypress".
Напротив, событие "keydown" фиксирует каждое нажатие клавиши, но у него нет свойства charCode. Как же мы можем определить, что это символьная клавиша? Проверять при каждом нажатии клавиши, находится ли keyCode в пределах нижней и верхней границы для нескольких диапазонов, не является оптимально эффективным. Я подозреваю, что есть проблемы и для символов за пределами диапазона ASCII.
Мой подход заключается в проверке длины свойства события "ключ". Свойство "key" является альтернативой "keyCode" для определения того, какая клавиша была нажата. Для контрольных клавиш свойство "key" является описательным (например, "правая стрелка", "F12", "return" и т.д.). Для символьных клавиш свойство "ключ" для символьной клавиши - это просто символ (например, "a", "A", "~", "\\" и т.д.). Поэтому для каждого символа-ключа длина свойства "ключ" будет равна 1; в то время как управляющие символы будут иметь длину больше 1.
Editor.addEventListener('keydown', function(event){
if (event.key.length == 1){
//// character key
} else {
//// control key
}
})
В этой статье приведен список ключевых кодов
в Javascript
:
http://www.cambiaresearch.com/articles/15/javascript-char-codes-key-codes
Вы также можете использовать регулярное выражение для этого:
$(".input").keyup(function (event) {
if (event.key.match(/^[\d\w]$/i)) {
// put function to trigger when a digit or a word character is pressed here
}
"я" флаг делает выражения без учета регистра.
Я заметил, что все персонажи с длиной 1 ('Это','б',число,символ) версия для печати поэтому я использую только. Я использую это решение для не-английских символов тоже:
if(e.key.length==1)
print();