jQuery: event.which возвращает разные коды, когда число нажимается с цифровой клавиатуры и с цифровых клавиш над алфавитами - PullRequest
1 голос
/ 30 ноября 2011

Когда я нажимаю 8 из чисел, присутствующих над алфавитами на клавиатуре, event.which возвращает 56, но когда я нажимаю 8 из числовой цифры, приведенной сбоку, он возвращает 104 (ascii of 'h').Я делал это:

var keyPressed = event.which;
String.fromCharCode(keyPressed); // returns 8 from keyboard, 'h' from keypad

Я делаю это внутри обработчика для события keydown .Теперь я знаю, что каждая клавиша на клавиатуре имеет свой код клавиши, и, возможно, событие. Которое возвращает код клавиши для цифровой клавиатуры 8, что, как правило, совпадает с ascii 'h'.Я просто хочу вернуть 8 независимо от того, откуда оно было напечатано.

Кроме того, я не могу привязать приведенный выше код к обработчику событий keyPress, так как он не захватывает удаление, вкладку и т. Д. В IE.

Ответы [ 2 ]

0 голосов
/ 07 февраля 2014

Есть лучший способ определить, какая клавиша была нажата в JavaScript / jQuery.

Во-первых, на общем примечании, событие нажатия клавиш более эффективно при получении всех нужных вам клавиш, поскольку нажатие клавиш не обязательно срабатывает при нажатии клавиш ENTER, ESC, TAB, клавиш со стрелками и т. Д.

Чтобы обнаружить цифры с цифровой клавиатуры ИЛИ строки цифр над клавиатурой QWERTY, используйте:

event.keyIdentifier

или, с событиями в JQuery:

event.originalEvent.keyIdentifier

«Событие» в этих примерах является объектом события keydown.

Это даст вам строковое значение в юникоде, представляющее фактический символ клавиши:

U + 002F или U + 0035, например. Затем проанализируйте это значение Unicode как шестнадцатеричное число:

parseInt(event.keyIdentifier.substring(2),16)

Использование 16 в качестве основы для parseInt преобразует шестнадцатеричное число в основание-10.

При использовании этого метода все цифровые клавиши будут иметь одинаковое значение независимо от того, исходят они с цифровой клавиатуры или с клавиатуры QWERTY. Числа 0 - 9 - 48 - 57. Таким образом, оператор if (), подобный этому, найдет все числа:

if (parseInt(event.keyIdentifier.substring(2),16) > 47 && parseInt(event.keyIdentifier.substring(2),16) < 58) {
    doSomething();
}
0 голосов
/ 30 ноября 2011

Коды Ascii и коды символов - это две разные вещи.Цифровая цифра «8» дает код символа 104, «h» - 72. Каждый ключ имеет свой номер, поэтому h всегда будет 72.

Коды символов

В Jocery Docs есть хороший пример Событие JQuery.

...