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