Я не совсем удовлетворен другими ответами.У всех них есть какой-то недостаток.
Использование keyPress
с event.which
ненадежно, потому что вы не можете поймать возврат или удаление (как упомянуто Тарлом).Использование keyDown
(как в ответах Нивы и Тарла) немного лучше, но решение имеет недостатки, поскольку оно пытается использовать event.keyCode
с String.fromCharCode()
(keyCode и charCode не совпадают!).
Однако то, что мы ДЕЛАЕМ с событием keydown
или keyup
, - это действительная клавиша, которая была нажата (event.key
).Насколько я могу судить, любой key
длиной 1 является символом (цифрой или буквой) независимо от того, какую языковую клавиатуру вы используете.Пожалуйста, поправьте меня, если это не так!
Тогда есть очень длинный ответ из asdf.Это может сработать отлично, но это похоже на излишество.
Итак, вот простое решение, которое поймает все символы, возврат и удаление.(Примечание: здесь будет работать keyup
или keydown
, но keypress
не будет)
$("input").keydown(function(event) {
var isWordCharacter = event.key.length === 1;
var isBackspaceOrDelete = event.keyCode === 8 || event.keyCode === 46;
if (isWordCharacter || isBackspaceOrDelete) {
// do something
}
});