Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Поправил ваш исходный код, сделав всю остальную статью бессмысленной:
element.addEventListener( 'keydown', event => {
if( event.defaultPrevented ) return
const KEY = event.key.toUpperCase()
const CTRL = event.ctrlKey
const SHIFT = event.shiftKey
switch( KEY ) {
case CTRL && SHIFT && 'F' : this.onSearch() ; break
case CTRL && SHIFT && 'Z' : this.onRedo() ; break
case CTRL && 'Z' : this.onUndo() ; break
default : return
}
event.preventDefault()
} )Утверждение что event обработан если он имеет флаг defaultPrevented и его распространение прервано — не верно.
switch( KEY ) {
case CTRL && SHIFT && 'F' : this.onSearch() ; break
case CTRL && SHIFT && 'Z' : this.onRedo() ; break
case CTRL && 'Z' : this.onUndo() ; break
default : return
}Перехватить CTRL+F без preventDefault не получится. Таким образом if( event.defaultPrevented ) return не гарантирует состояния обработанности.
Гарантирует, что кто-то событие уже обработал и попросил далее никому не обрабатывать.
про кросбраузерность использоваться символьного представления клавиши
Для этого есть полифилы.
Ну и пожалуй в коде какие-то проблемы…
Нет там никаких проблем, не выдумывайте.
простым в дебаге и понятным, от этого он не становится. Не говоря уже про рефакторинг такого и масштабируемость
Что вам не понятно в этом тривиальном коде и что вызывает у вас сложности с дебагом, рефакторингом и масштабируемостью?
Обработка нажатий клавиш ака shortcuts и дебаггинг