Разница между keydown и keypressed?

Почему то при keypress кнопка выдает разный код на один символ, когда заменил на keydown то всё стало на места, код один и тот же у одного символа в разном состоянии. Подскажите пожалуйста в чем между ними разница?

Почему то при keypress кнопка выдает разный код на один символ, когда заменил на keydown то всё стало на места, код один и тот же у одного символа в разном состоянии. Подскажите пожалуйста в чем между ними разница?

Событие keydown как и событие keyup происходят при нажатии и отпускании клавиши, они позволяют получить скан код в свойстве keycode, насколько я понял, тут сравнивают именно клавиши, потому как символ q Q й Й будут иметь один код равный 81.

Раньше была масса несовместимостей из за того что в разных браузерах был разный код, сейчас вроде такой проблемы как раньше нет, практически все браузеры имеют одинаковые коды, кроме вроде Firefox.

Keypress возникает после keydown и данное событие приводит к появлению символа, так как символы разные код там один для индивидуального символа. В общем если вам всё равно на то какой там символ а интересует расположение клавиши то используйте keydown, если же символ имеет ключевое значение то keypress. Вот такая функция есть для получения символа из события keypress (кроссбраузерная)

function getChar(event) {
if (event.which == null) {
if (event.keyCode < 32) return null;
return String.fromCharCode(event.keyCode)
}

if (event.which != 0