如何防止所有 switch 指令情况下的默认事件
How to prevent default event for all cases of switch instruction
在处理很多可能的 keyCode
时(例如:对于热键),我们希望使用 switch
语句。
我们不想阻止 Ctrl + 另一个键 的所有组合以保留其他构造函数 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);
您可以简单地使用在默认情况下仅设置为 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);
在处理很多可能的 keyCode
时(例如:对于热键),我们希望使用 switch
语句。
我们不想阻止 Ctrl + 另一个键 的所有组合以保留其他构造函数 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);
您可以简单地使用在默认情况下仅设置为 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);