Какова функциональность события javascript e.which? Просьба привести пример.
Javascript событие e.which?
Ответ 1
e.which
не является событием, which
является свойством объекта event
, который большинство людей помечено как e
в своих обработчиках событий. Он содержит key code ключа, который был нажат для запуска события (например: keydown, keyup).
document.onkeypress = function(myEvent) { // doesn't have to be "e"
console.log(myEvent.which);
};
С помощью этого кода консоль распечатает код любой клавиши, которую вы нажимаете на клавиатуре.
Ответ 2
which
является свойством объектов Event
. Он определен для связанных с ключами и связанных с мышью событий в большинстве браузеров, но в обоих случаях не определен в IE (до версии 9).
Для событий, связанных с мышью, which
указывает кнопку мыши, которая была задействована. Для IE < 9, эквивалентное значение найдено в window.event.button
. Просто чтобы усложнить ситуацию, браузеры, отличные от IE, также поддерживают свойство button
событий мыши, которое иногда сообщает о другом значении от which
. Кроме того, браузеры иногда имеют разные значения для одной и той же кнопки или комбинации кнопок. Если вы используете which
во всех браузерах, поддерживающих его, и button
в IE < 9, одна константа состоит в том, что значение 1 всегда означает, что задействована левая кнопка мыши (хотя и не обязательно одна).
document.onmousedown = function(e) {
e = e || window.event;
var button = (typeof e.which != "undefined") ? e.which : e.button;
if (button == 1) {
alert("Left mouse button down");
}
};
Для полного анализа я рекомендую статью Яна Вольтера о событиях мыши JavaScript.
Для событий, связанных с ключом, which
относится к нажатой клавише. Для событий keydown
и keyup
это относительно просто: это key code для нажатой клавиши и возвращает то же значение, что и свойство события keyCode
. Поскольку все браузеры поддерживают свойство keyCode
и IE < 9 не поддерживает which
, вы обычно должны использовать keyCode
для событий keydown
и keyup
.
При событиях keypress
ситуация более сложная. Для печатных символов символов which
- это код символа для нажатия клавиши и поддерживается в более браузерах, чем свойство charCode
. В IE < 9 эквивалент снова является свойством keyCode
. Таким образом, для обнаружения введенного символа, это кросс-браузерный подход. Имейте в виду, что приведенный ниже код не должен использоваться для непечатаемых клавиш, таких как клавиши со стрелками, которые вы должны обнаружить в событии keydown
:
document.onkeypress = function(e) {
e = e || window.event;
var charCode = (typeof e.which == "number") ? e.which : e.keyCode;
if (charCode) {
alert("Character typed: " + String.fromCharCode(charCode));
}
};
Опять же, для более подробной информации я рекомендую статью Яна Вольтера о событиях ключевого слова JavaScript
Ответ 3
Эта функция удалена из веб-стандартов. Хотя некоторые браузеры все еще могут его поддерживать, он находится в процессе отбрасывания. Не используйте его в старых или новых проектах. Страницы или веб-приложения, использующие его, могут прерываться в любое время.
Вместо этого вы должны использовать KeyboardEvent.key
, если он доступен.
Ответ 4
Во время события e
:
e.which
совпадает с:
e.keyCode
Таким образом, обе функции позволяют получить код ключа клавиши, нажатой во время нажатия клавиши, нажатия клавиш или события keyup
Многие люди используют ||
(OR), чтобы убедиться, что их код работает в браузерах, которые не поддерживают какое свойство. Посмотрите на код ниже:
document.onkeypress = function(e) {
var key = e.which || e.keyCode;
alert(key);
}