Event.keycode vs event.which - программирование

Event.keycode vs event.which

Я испортил поведение при работе с Firefox, поскольку нажатие клавиши ввода (действительно, любой клавиши) без фокусировки на конкретном поле НЕ запускает событие keydown, оно вызовет только событие нажатия клавиши.

Это может быть очень запутанным, так как в keydown и keyup event используются коды кода JavaScript, тогда как keypress использует коды ASCII. К счастью, 13 (ввод/возврат) является общим для обоих.

Есть ли какая-нибудь известная причина, почему FF использует keypress в этом обстоятельстве? Какая польза?

Как только это было установлено, IE8 бросил глупость в том, что он не позволяет запретить требовать от Default вместо returnValue = false следующий фрагмент из другого сообщения SO оказался очень полезным:

event.preventDefault ? event.preventDefault() : event.returnValue = false;

Во время поиска для решения этих проблем меня постоянно путают event.keycode vs event.which. А именно, я делаю неправильно, используя оператор switch, аналогичный:

$("#class_Name").bind("keydown", function(event){
    // do not test input if field controls used
    switch(event.which){
       case 13:
       //enter key 
       event.preventDefault ? event.preventDefault() : event.returnValue = false;
       break;
     }


Является ли следующее лучше, если да, то почему?

$("body").keypress(function(event){
     // stop inadvertant form submission
     if (event.keycode == "13"){
       event.preventDefault ? event.preventDefault() : event.returnValue = false;
     }
});


Я просто хотел бы знать, чтобы я знал, что лучше всего применять.

Большое спасибо.

4b9b3361

Ответ 1

В некоторых браузерах используется keyCode, а другие - which. Но с jQuery это нормализуется, поэтому вам не нужно об этом думать. Вы можете выбрать тот, который вы предпочитаете.

Ответ 2

Согласно этот комментарий jQuery может быть ненадежным и эта страница говорит:

event.which undefined в IE < 9 на keydown и keyup.

event.keyCode - это 0 в Gecko (Seamonkey, Firefox) на keypress для ключей, которые возвращают символ.

event.charCode поддерживается только при подключении к клавиатуре и нажатии клавиши Internet Explorer (Mac).

Попробуйте на JSFiddle