Странное поведение при обработке нажатий клавиш в JavaScript

Проблема с получением значения нажатых клавиш в JavaScript

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

Когда я вывожу коды нажатых клавиш в консоль, они постоянно меняются. Например, когда я нажимаю букву Q, получаю числа от 48 до 57, что выглядит как периодическая зацикленность: в первый раз это 48 или 81 (в соответствии с моими исследованиями). При следующем нажатии это 49 и больше не 81, и так до 57, после чего снова начинается с 48.

К тому же, все буквенные клавиши выдают одинаковые числа. Я проверил другие ресурсы, и аналогичная проблема наблюдается и там.

Вот код, который я использую для получения кода клавиши:

document.addEventListener('keydown', function(e) {
    console.log(e.keyCode);
}, false);

Кто-либо сталкивался с этой проблемой? Что может быть не так?

Странно… Ты не зажимаешь случайно другие клавиши? Может Ctrl или Shift застряли? Проверь, нет ли подключенной внешней клавиатуры или геймпада - они иногда конфликтуют. Какой браузер?

Похожая проблема была у меня месяц назад! keyCode давно deprecated - браузеры с ним работают криво. Замени e.keyCode на e.code или e.key. e.key для Q вернет “q” или “Q”, e.code даст “KeyQ”. После замены у меня все заработало, странные циклы исчезли.

Похоже, у тебя включен NumLock или какая-то программа перехватывает клавиатуру. Коды 48-57 — это цифры 0-9, не буквы. Убедись, что браузер в фокусе при тестировании. Попробуй инкогнито без расширений. Или добавь e.preventDefault() в обработчик.