Почему событие jQuery, которое дает разные результаты в Firefox и Chrome?

Взгляните на эту демоверсию (с сайта jQuery).

Нажатие - (тире) в Firefox говорит, что event.which равно 173, а то же самое в Chrome дает 189.

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

Почему это несоответствие?


person Misha Moroshko    schedule 11.08.2013    source источник


Ответы (1)


На этой странице jQuery говорится, что event.that следует нормализовать для согласованности между браузерами. Но, похоже, это неправда.

jQuery нормализует свойство name (например, всегда which, а не which или keyCode в зависимости от браузера), но не значение свойства, что было бы намного сложнее.

Значение ключа, которое вы получаете от keydown/keyup, зависит не только от браузера, но и от раскладки клавиатуры. На странице JavaScript Madness: Keyboard Events есть много кровавых подробностей. Ян Вольтер. Среди прочего, вы можете видеть на этой странице, что для этого ключа Firefox даст вам 109, IE (и, по-видимому, Chrome) даст вам 189, а Opera, по-видимому, использовала 45 (но в моих тестах на Linux они теперь иди со 109).

Для печатных нажатий клавиш (например, -) вам лучше использовать событие keypress, которое дает вам результирующий символ.

person T.J. Crowder    schedule 12.08.2013
comment
Большое спасибо за разъяснение! - person Misha Moroshko; 12.08.2013
comment
Начиная с jQuery 1.11, похоже, что jQuery не полностью нормализует свойство event.which, по крайней мере, в FireFox. Как видно здесь: jsbin.com/sozoqiro/1/edit?html,console event.which и event.keyCode имеют разные значения в зависимости от того, какую клавишу вы нажимаете. Нажатие печатного символа, кажется, заполняет e.which, в то время как клавиша Tab, например, заполняет e.keyCode, а клавиша Enter заполняет e.which и e.keyCode одним и тем же значением. В FireFox для незаполненного свойства установлено значение 0. - person DavidScherer; 07.06.2014
comment
В Chrome это кажется нормальным, но keypress не срабатывает для клавиш Tab в Chrome. - person DavidScherer; 07.06.2014