код ключа и код - PullRequest
       37

код ключа и код

51 голосов
/ 18 сентября 2009

Почему люди пишут заявления типа

e.keyCode ? e.keyCode : e.charCode

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

Может кто-нибудь объяснить, пожалуйста?

Ответы [ 6 ]

97 голосов
/ 18 сентября 2009

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

Во-первых, существует два разных типа кодов: коды клавиатуры (число, обозначающее клавишу на клавиатуре, которую нажал пользователь) и коды символов (число, представляющее символ 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");
  }
}
9 голосов
/ 18 сентября 2009

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

Если браузер поддерживает e.keyCode, тогда возьмите e.keyCode, иначе e.charCode.

Это похоже на

var code = event.keyCode || event.charCode

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

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

4 голосов
/ 12 декабря 2015

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

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

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

e.which - (специфично для jQuery) - это свойство, введенное в jQuery (НЕ использовать в простом 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 .

4 голосов
/ 18 сентября 2009

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

charCode аналогичен, но в этом случае вы получаете значение Unicode нажатого символа. Например, буква «А».

Выражение 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 согласно комментариям Тора Хаугена.

0 голосов
/ 17 августа 2017

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

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

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

0 голосов
/ 27 декабря 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...