KeyboardEvent.keyCode:
Значение события нажатия клавиши отличается в разных браузерах.IE и Google Chrome устанавливают значение KeyboardEvent.charCode.Gecko устанавливает 0, если нажатая клавиша является клавишей для печати, в противном случае он устанавливает тот же код клавиши, что и событие keydown или keyup
Так что с точки зрения Firefox он фактически вернул правильные значения.См. документы .
keyCode
, which
, keyIdentifier
и charCode
устарели
Эта функция удалена из веб-стандартов.Хотя некоторые браузеры все еще могут поддерживать его, он находится в процессе удаления.Избегайте его использования и обновляйте существующий код, если это возможно;
keyIdentifier
не поддерживал IE и Firefox и был удален из Opera и Chrome
с charCode
как нестандартный
Эта функция нестандартна и не соответствует стандарту.Не используйте его на рабочих сайтах, выходящих в Интернет: он не будет работать для каждого пользователя.Также могут быть большие несовместимости между реализациями
Так каковы альтернативы?
I.Вместо этого используйте свойство key
readonly attribute DOMString key
Содержит значение атрибута клавиши, соответствующее нажатой клавише
Примеры: "a", "A", "@","% "," $ "," ا "," ب "," ة "," ت ", ...," ١ "," ٢ "," ٣ "," Tab "," Enter ",все "F1" ... `
Он заслужил поддержку всех основных браузеров (Firefox 52, Chrome 55, Safari 10.1, Opera 46), кроме Internet Explorer 11, который имеет нестандартные идентификаторы ключей и некорректное поведениес AltGraph. Дополнительная информация
Если это важно и / или имеет место обратная совместимость, вы можете использовать функцию обнаружения, как показано в следующем коде:
Обратите внимание, что значение key
отличается от свойств keyCode
или which
тем, что содержит имя ключа, а не его код.Если вашей программе нужны коды символов, вы можете использовать charCodeAt()
.Для отдельных печатаемых символов вы можете использовать charCodeAt()
, если вы имеете дело с ключами, значения которых содержат несколько символов, таких как ArrowUp , есть вероятность: вы тестируете специальные ключи и предпринимаете соответствующие действия.Поэтому попробуйте реализовать таблицу значений ключей и их соответствующих кодов charCodeArr["ArrowUp"]=38
, charCodeArr["Enter"]=13
, charCodeArr[Escape]=27
... и т. Д., Пожалуйста, посмотрите на Key Values и их , соответствующиекоды
if(e.key!=undefined){
var characterCode = charCodeArr[e.key] || e.key.charCodeAt(0);
}else{
/* As @Leonid suggeted */
var characterCode = e.which || e.charCode || e.keyCode || 0;
}
/* ... code making use of characterCode variable */
II. Вы также можете использовать свойство code
:
readonly attribute DOMString code
Содержит строку, идентифицирующую физическую нажатую клавишу,На значение не влияет текущая раскладка клавиатуры или состояние модификатора, поэтому определенная клавиша всегда будет возвращать одно и то же значение.
Это имеет эффект, аналогичный свойству key
и выводу типа "keyW"
для кнопки W, нажатой на клавиатуре США с раскладкой QUERTY.Если бы та же кнопка была нажата в другом макете (AZERTY) или другом языке (иврит) или в сочетании с модификатором (shift), свойство key
изменилось бы соответствующим образом, в то время как свойство code
все равно будет иметь то же значение "keyW"
подробнее об этом здесь .
Свойство code
поддерживается в Chrome 49, Firefox 52, Safari 10.1 и Opera 46, но не в Internet Explorer.
см. также:
- KeyboardEvent.charCode
- KeyboardEvent.keyIdentifier
- KeyboardEvent.keyCode
- KeyboardEvent.which
- KeyboardEvent.key
- поддержка свойств ключа
- KeyboardEvent.code
- поддержка свойств кода