【问题标题】:How to prevent default event for all cases of switch instruction如何防止所有切换指令情况的默认事件
【发布时间】:2020-07-31 23:31:27
【问题描述】:

在处理很多可能的keyCode(例如:对于热键)时,我们希望使用switch 语句。

我们不想阻止 Ctrl + another key 的所有组合以保留其他构造函数 hotkeys

我们希望仅针对已定义的情况阻止默认操作。但是如何做到一次呢?

我认为我遗漏了一些非常明显的东西。

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);

【问题讨论】:

    标签: javascript events switch-statement hotkeys keycode


    【解决方案1】:

    您可以简单地使用在默认情况下仅设置为true 的变量prevent。然后在switch语句后做e.preventDefault(),如下:

    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);
    

    【讨论】:

    • 哇,简单但高效!非常感谢 !不过还是先试试吧。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多