Pull to refresh

Comments 3

Поправил ваш исходный код, сделав всю остальную статью бессмысленной:


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 и его распространение прервано — не верно.

В качестве пояснения, приведу пример. Перехватить CTRL+F без preventDefault не получится. Таким образом if( event.defaultPrevented ) return не гарантирует состояния обработанности. — Это первое.

До картинки вы похоже не дочитали про кросбраузерность использоваться символьного представления клавиши… — это второе…
Ну и пожалуй в коде какие-то проблемы…

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 не гарантирует состояния обработанности.

Гарантирует, что кто-то событие уже обработал и попросил далее никому не обрабатывать.


про кросбраузерность использоваться символьного представления клавиши

Для этого есть полифилы.


Ну и пожалуй в коде какие-то проблемы…

Нет там никаких проблем, не выдумывайте.


простым в дебаге и понятным, от этого он не становится. Не говоря уже про рефакторинг такого и масштабируемость

Что вам не понятно в этом тривиальном коде и что вызывает у вас сложности с дебагом, рефакторингом и масштабируемостью?

Sign up to leave a comment.

Articles