Подтвердить что ты не робот

Keycode и charcode

Почему люди пишут оператор вроде

e.keyCode ? e.keyCode : e.charCode

Некоторые люди также используют e.which

Может кто-нибудь объяснит?

4b9b3361

Ответ 1

Обработка ключевых событий последовательно не всегда легко.

Во-первых, существуют два разных типа кодов: коды клавиатуры (число, обозначающее клавишу на клавиатуре, которую пользователь нажал) и коды символов (число, обозначающее символ Unicode). Вы можете только надежно получить коды символов в событии keypress. Не пытайтесь получить коды символов для событий keyup и keydown.

Во-вторых, вы получаете разные наборы значений в событии keypress для того, что вы получаете в событии keyup или keydown.

Я рекомендую эту страницу в качестве полезного ресурса. В резюме:

Если вы заинтересованы в обнаружении пользователя, набравшего символ, используйте событие keypress. IE странно только сохраняет код символа в keyCode, а все остальные браузеры хранят его в which. Некоторые (но не все) браузеры также хранят его в charCode и/или keyCode. Пример обработчика нажатия клавиш:

function(evt) {
  evt = evt || window.event;
  var charCode = evt.which || evt.keyCode;
  var charStr = String.fromCharCode(charCode);
  alert(charStr);
}

Если вы заинтересованы в обнаружении непечатаемого ключа (например, клавиши курсора), используйте событие keydown. Здесь keyCode всегда является свойством использования. Обратите внимание, что события keyup имеют одинаковые свойства.

function(evt) {
  evt = evt || window.event;
  var keyCode = evt.keyCode;

  // Check for left arrow key
  if (keyCode == 37) {
    alert("Left arrow");
  }
}

Ответ 2

Это условное утверждение.

Если браузер отключает e.keyCode, тогда возьмите e.keyCode else e.charCode.

Он похож на

var code = event.keyCode || event.charCode

event.keyCode: возвращает значение Unicode несимвольной клавиши в событии нажатия клавиши или любой клавише любого другого типа клавиатуры событие.

event.charCode: возвращает значение Unicode символьной клавиши, нажатой во время события нажатия клавиши.

Ответ 3

keyCode и которые представляют собой фактическую клавишу клавиатуры, нажатую в виде числового значения. Причина в том, что keyCode доступен в Internet Explorer, в то время как доступен в браузерах W3C, таких как FireFox.

charCode похож, но в этом случае вы извлекаете значение Unicode символа. Например, буква "A."

Выражение JavaScript:

var keyCode = e.keyCode ? e.keyCode : e.charCode;

По существу говорится следующее:

Если свойство e.keyCode существует, установите для него значение keyCode. В противном случае установите переменную keyCode в значение свойства e.charCode.

Обратите внимание, что получение свойств keyCode или charCode обычно связано с выяснением различий между моделями событий в IE и W3C. Некоторые влечет за собой написание кода следующим образом:

/*
 get the event object: either window.event for IE 
 or the parameter e for other browsers
*/
var evt = window.event ? window.event : e;
/*
 get the numeric value of the key pressed: either 
 event.keyCode for IE for e.which for other browsers
*/
var keyCode = evt.keyCode ? evt.keyCode : e.which;

ИЗМЕНИТЬ: Исправления к моему объяснению charCode в соответствии с комментариями Tor Haugen.

Ответ 4

Хорошо, вот объяснения.

e.keyCode - используется для получения номера, представляющего ключ на клавиатуре

e.charCode - номер, представляющий символ юникода ключа на клавиатуре

e.which - (специфичный jQuery) - это свойство, введенное в jQuery (DO не используется в простом javascript)

Ниже приведен фрагмент кода для получения keyCode и charCode

<script>
// get key code
function getKey(event) {
  event = event || window.event;
  var keyCode = event.which || event.keyCode;
  alert(keyCode);
}

// get char code
function getChar(event) {
  event = event || window.event;
  var keyCode = event.which || event.keyCode;
  var typedChar = String.fromCharCode(keyCode);
  alert(typedChar);
}
</script>

Живой пример Получение keyCode и charCode в JavaScript.

Ответ 5

I (будучи самим собой) написал этот оператор, потому что я хотел обнаружить ключ, который пользователь набрал на клавиатуре в разных браузерах.

Например, в firefox символы имеют > 0 charCode и 0 keyCode, а такие клавиши, как стрелки и обратное пространство, имеют > 0 keyCode и 0 charCode.

Однако использование этого утверждения может быть проблематичным, поскольку возможны "столкновения". Например, если вы хотите различать клавиши "Удалить" и "Период", это не будет работать, так как у Delete есть keyCode = 46, а Period имеет charCode = 46.

Ответ 6

При использовании jQuery добавляется свойство event.which, чтобы избежать различий браузера. См. документы.

Свойство which будет undefined, если вы не используете jQuery.