Почему jQuery event.which дает разные результаты в Firefox и Chrome?

Посмотрите эту живую демонстрацию (с сайта jQuery).

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

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

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

Ответ 1

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

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

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

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