Как предотвратить событие по умолчанию для всех случаев команды переключения - PullRequest
1 голос
/ 18 апреля 2020

При работе с большим количеством возможных keyCode (например, для горячих клавиш) мы хотели бы использовать оператор switch.

Мы не хотим запрещать все комбинации Ctrl + другую клавишу для сохранения другого конструктора горячие клавиши .

Мы хотели бы предотвратить действие по умолчанию только для определенных случаев. Но как это сделать один раз?

Я думаю, что упускаю что-то действительно очевидное.

document.addEventListener("keydown", function(e) {
  var key = e.keyCode || e.which;
  if (!e.ctrlKey) return false;

    switch(key) {
      case 109: e.preventDefault(); scale(-1); break;
      case 107: e.preventDefault(); scale(1); break;
      case 96: e.preventDefault(); scale(0);break;
      case 78: e.preventDefault(); newFile();break;
      case 79: e.preventDefault(); openFile();break;
      case 80: e.preventDefault(); printFile();break;
      case 83: e.preventDefault(); saveFile();break;
      case 66: e.preventDefault(); command("bold");break;
      case 73: e.preventDefault(); command("italic");break;
      case 85: e.preventDefault(); command("underline");break;
      case 76: e.preventDefault(); command("justifyLeft");break;
      case 69: e.preventDefault(); command("justifyCenter");break;
      case 82: e.preventDefault(); command("justifyRight");break;
      case 74: e.preventDefault(); command("justifyFull");break;
      case 90: e.preventDefault(); clipboard.undo();break;
      case 89: e.preventDefault(); clipboard.redo();break;
      default: console.log("Key pressed n°", key)
    }
}, false);

1 Ответ

1 голос
/ 18 апреля 2020

Вы можете просто использовать переменную prevent, которая установлена ​​только на true в случае по умолчанию. Затем выполните e.preventDefault() после оператора switch следующим образом:

document.addEventListener("keydown", function(e) {
  var key = e.keyCode || e.which;
  if (!e.ctrlKey) return false;

    var prevent = true;

    switch(key) {
      case 109: scale(-1); break;
      case 107: scale(1); break;
      case 96: scale(0);break;
      case 78: newFile();break;
      case 79: openFile();break;
      case 80: printFile();break;
      case 83: saveFile();break;
      case 66: command("bold");break;
      case 73: command("italic");break;
      case 85: command("underline");break;
      case 76: command("justifyLeft");break;
      case 69: command("justifyCenter");break;
      case 82: command("justifyRight");break;
      case 74: command("justifyFull");break;
      case 90: clipboard.undo();break;
      case 89: clipboard.redo();break;
      default: prevent = false; console.log("Key pressed n°", key); break;
    }

    if (prevent) e.preventDefault();
}, false);
...