2009-09-18 3 views
48

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

e.keyCode ? e.keyCode : e.charCode 

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

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

ответ

9

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

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

Он похож на

var code = event.keyCode || event.charCode 

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

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

+9

Это может быть написано как однострочный : 'var keyCode = event.keyCode || event.charCode'. – davidchambers

4

keyCode и которые представляют собой фактическую клавишу клавиатуры, нажатую в виде числового значения. Причина в том, что 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; 

EDIT: Исправления к объяснению charCode как на комментарии Tor Haugen в.

+0

e.charCode - * не * текстовый. Он возвращает (числовое) значение unicode для символа. Он отличается от keyCode тем, что он будет иметь разные значения для A и a, например (то есть, удерживается ли сдвиг или нет). –

+0

@Tor: спасибо за исправление. Я отредактировал ответ. –

93

Обращение с ключевыми событиями не всегда легко.

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

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

Я рекомендую this page как полезный ресурс. В резюме:

Если вас интересует обнаружение пользователя, набравшего символ, используйте событие 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"); 
    } 
} 
+0

Спасибо, хорошая информация: D –

+0

сэр ... почему мы используем или ... evt.which || evt.keyCode ... почему не только e.which ... когда по существу e.which возвращает keyCode нажатой клавиши или код символа для буквенно-цифровой клавиши нажатой. –

+2

@bhavya_w: поддержка старых версий Internet Explorer (версия 8 и более ранних версий), которые сохраняют код символа в 'keyCode' и не поддерживают свойство' which'. См. Http://unixpapa.com/js/key.html для подробностей. –

-2

Свойство event.which добавляется при использовании JQuery, чтобы избежать различий браузеров. See docs.

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

+3

'event.which' на самом деле является наследием со времен Netscape 4 и по-прежнему доступен (хотя и устарел) в современных браузерах. jQuery просто принял одно и то же имя в собственном объекте события. – MrWhite

2

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

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

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

е .which - (jQuery specific) - это свойство, введенное в 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> 

Живой пример Getting keyCode and charCode in JavaScript.

+0

Наконец-то я получаю правильное объяснение – NaveenDA

0

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

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

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