Почему люди пишут заявление, какскан и charcode
e.keyCode ? e.keyCode : e.charCode
Некоторые люди также используют e.which
Может кто-нибудь объяснить?
Почему люди пишут заявление, какскан и charcode
e.keyCode ? e.keyCode : e.charCode
Некоторые люди также используют e.which
Может кто-нибудь объяснить?
Это условное утверждение.
Если браузер отключает e.keyCode, тогда возьмите e.keyCode else e.charCode.
Он похож на
var code = event.keyCode || event.charCode
event.keyCode: Возвращает значение Unicode ключа несимвольного в случае нажатия клавиши или любой клавиши в любом другом типе события клавиатуры.
event.charCode: Возвращает значение Unicode символьной клавиши, нажатой во время события нажатия клавиши.
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 в.
e.charCode - * не * текстовый. Он возвращает (числовое) значение unicode для символа. Он отличается от keyCode тем, что он будет иметь разные значения для A и a, например (то есть, удерживается ли сдвиг или нет). –
@Tor: спасибо за исправление. Я отредактировал ответ. –
Обращение с ключевыми событиями не всегда легко.
Во-первых, существуют два разных типа кодов: коды клавиатуры (число, обозначающее клавишу на клавиатуре, которую пользователь нажал) и коды символов (число, обозначающее символ Юникода). Вы можете только надежно получить коды символов в событии 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");
}
}
Спасибо, хорошая информация: D –
сэр ... почему мы используем или ... evt.which || evt.keyCode ... почему не только e.which ... когда по существу e.which возвращает keyCode нажатой клавиши или код символа для буквенно-цифровой клавиши нажатой. –
@bhavya_w: поддержка старых версий Internet Explorer (версия 8 и более ранних версий), которые сохраняют код символа в 'keyCode' и не поддерживают свойство' which'. См. Http://unixpapa.com/js/key.html для подробностей. –
Свойство event.which
добавляется при использовании JQuery, чтобы избежать различий браузеров. See docs.
Свойство which
будет не определено, если вы не используете jQuery.
'event.which' на самом деле является наследием со времен Netscape 4 и по-прежнему доступен (хотя и устарел) в современных браузерах. jQuery просто принял одно и то же имя в собственном объекте события. – MrWhite
Хорошо, вот объяснения.
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.
Наконец-то я получаю правильное объяснение – NaveenDA
I (будучи самим собой) написал это заявление, потому что я хотел обнаружить ключ, который пользователь набрал на клавиатуре в разных браузерах.
В firefox, например, символы имеют> 0 charCode и 0 keyCode, а клавиши, такие как стрелки & backspace имеют> 0 keyCode и 0 charCode.
Однако использование этого утверждения может быть проблематичным, поскольку возможны «столкновения». Например, если вы хотите различать клавиши «Удалить» и «Период», это не будет работать, так как у Delete есть keyCode = 46, а Period имеет charCode = 46.
Это может быть написано как однострочный : 'var keyCode = event.keyCode || event.charCode'. – davidchambers