Событие javascript - PullRequest
       22

Событие javascript

64 голосов
/ 16 июня 2010

Какова функциональность события javascript e.which?Пожалуйста, кратко с примером.

Ответы [ 4 ]

76 голосов
/ 16 июня 2010

which является собственностью Event объектов. Он определен для событий, связанных с ключами и мышью, в большинстве браузеров, но в обоих случаях не определен в IE (до версии 9).

Для событий, связанных с мышью, which определяет задействованную кнопку мыши. Для IE <9 эквивалентное значение находится в <code>window.event.button. Просто, чтобы усложнить ситуацию, браузеры не IE также поддерживают свойство button событий мыши, которое иногда сообщает значение, отличное от which. Кроме того, браузеры иногда имеют разные значения для одной и той же кнопки или комбинации кнопок. Если вы продолжаете использовать which во всех браузерах, которые его поддерживают, и button в IE

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 это относительно просто: это код клавиши для нажатой клавиши, который возвращает то же значение, что и свойство keyCode события. Поскольку все браузеры поддерживают свойство keyCode, а IE <9 не поддерживает <code>which, обычно следует использовать keyCode для событий keydown и keyup.

Для событий keypress ситуация более сложная. Для печатных символьных клавиш which - это код символа для нажатой клавиши, который поддерживается в большем количестве браузеров, чем свойство charCode. В IE <9 эквивалент снова равен свойству <code>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

62 голосов
/ 16 июня 2010

e.which не является событием, which является свойством объекта event, который большинство людей помечают как e в своих обработчиках событий. Он содержит код клавиши, которая была нажата для запуска события (например, keydown, keyup).

document.onkeypress = function(myEvent) { // doesn't have to be "e"
    console.log(myEvent.which);
};

С этим кодом консоль распечатает код любой клавиши, которую вы нажимаете на клавиатуре.

6 голосов
/ 07 сентября 2016

Эта функция была удалена из веб-стандартов.Хотя некоторые браузеры все еще могут поддерживать его, он находится в процессе удаления.Не используйте его в старых или новых проектах.Страницы или веб-приложения, использующие его, могут сломаться в любое время.

Вместо этого следует использовать KeyboardEvent.key, если оно доступно.

3 голосов
/ 25 ноября 2016

Во время события e:

e.which

совпадает с:

e.keyCode

Таким образом, обе функции позволяют получить код клавиши, нажатой во время нажатия клавиши,событие keydown или keyup

Многие люди используют || (ИЛИ), чтобы убедиться, что их код работает в браузерах, которые не поддерживают какое свойство.Посмотрите на код ниже:

document.onkeypress = function(e) {
   var key = e.which || e.keyCode;
   alert(key);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...