Javascript: event.which и charCodeAt работают вместе

Я беру то, что пользователь набрал, используя event.which на нажатие клавиши, и вывод, используя String.fromCharCode.

Типы пользователей:
событие, которое: 67
Выходы: A

С цифрами и буквами я могу справиться, но когда речь идет о специальных символах, я получаю совершенно разные результаты.

Типы пользователей: -
событие, которое: 189
Выходы: ½

После исследования я наткнулся на функцию charCodeAt, и, используя эту функцию, на выходе получается идеально, даже специальные символы.

К сожалению, я не могу использовать charCodeAt, потому что пользователь печатает напрямую из $(document), а не из поля.

Итак, вопрос в том, есть ли способ получить правильный charCode из события keyPress.

Если до сих пор не могу понять мои сомнения, я сделал тебя скрипкой =)

2 ответа

Решение

Использовать keypress событие вместо keyup, Он сообщает код символа вместо кодов клавиш и запускается при наборе фактических символов, а не при отпускании клавиши, поэтому он также обрабатывает повторяющиеся символы.

$('#field').focus().keypress(function(e){
  var key = e.which;
  $("#key").val(String.fromCharCode(key));
});

http://jsfiddle.net/Guffa/QCHt7/1/

Редактировать:

Если вы хотите отлавливать нажатия клавиш повсюду, вам нужно подключить событие к документу, а также к любым элементам, которые используют нажатия клавиш. Например, текстовое поле будет обрабатывать нажатие клавиш и не позволит пузырю всплыть до родительского элемента.

Вы используете keyup, событие, которое сообщает, какая клавиша была нажата, а не какой символ был введен. Вместо этого вы должны использовать нажатие клавиш, вот так:

$(document).keyup(function(e){
    console.log(String.fromCharCode(e.which));
});

Из документа JQuery на клавиатуре:

Обратите внимание, что нажатие клавиш и нажатие клавиш предоставляют код, указывающий, какая клавиша нажата, а нажатие клавиши указывает, какой символ был введен. Например, строчная буква "а" будет отображаться как 65 при нажатии клавиш и при нажатии клавиш, а как 97 при нажатии клавиш. Прописная буква "А" сообщается как 65 по всем событиям. Из-за этого различия при отлове специальных нажатий клавиш, таких как клавиши со стрелками, лучше использовать.keydown() или.keyup().

Другие вопросы по тегам