Javascript 对多个事件使用e.preventDefault()一次
在下面的代码中,您可以看到我根据需要多次使用了Javascript 对多个事件使用e.preventDefault()一次,javascript,Javascript,在下面的代码中,您可以看到我根据需要多次使用了e.preventDefault() 我正在寻找一种方法来使用e.preventDefault()一次,但保持与下面代码相同的功能 不要告诉我将e.preventDefault()放在ctrl之后,因为我想让其他快捷键继续工作 document.addEventListener("keydown", function(e) { // shortcuts if (e.ctrlKey) { // Ctrl+ switch (e.keyCode
e.preventDefault()
我正在寻找一种方法来使用e.preventDefault()
一次,但保持与下面代码相同的功能
不要告诉我将e.preventDefault()
放在ctrl
之后,因为我想让其他快捷键继续工作
document.addEventListener("keydown", function(e) { // shortcuts
if (e.ctrlKey) { // Ctrl+
switch (e.keyCode) {
case 82: // R
e.preventDefault();
newDoc();
break;
case 79: // O
e.preventDefault();
openDoc();
break;
case 83: // S
e.preventDefault();
saveDoc();
break;
case 66: // B
e.preventDefault();
showHideStatusBar(statusBarOn ? false : true); // toggle
break;
case 191: // /
e.preventDefault();
alert("Welcome to " + appname + "!");
break;
}
}
if (e.keyCode == 9) { // tab
e.preventDefault();
var sStart = textarea.selectionStart,
text = textarea.value;
textarea.value = text.substring(0, sStart) + "\t" + text.substring(textarea.selectionEnd);
textarea.selectionEnd = sStart + 1;
}
});
终于得到了这个:
document.addEventListener("keydown", function(e) { // shortcuts
var key = {
"noctrl9": function() { // tab
var sStart = textarea.selectionStart,
text = textarea.value;
textarea.value = text.substring(0, sStart) + "\t" + text.substring(textarea.selectionEnd);
textarea.selectionEnd = sStart + 1;
},
66: function() { // B
showHideStatusBar(statusBarOn ? false : true); // toggle
},
79: openDoc, // O
82: newDoc, // R
83: saveDoc, // S
191: function() { // /
alert("Welcome to " + appname + "!");
}
}, fn = e.ctrlKey ? key[e.keyCode] : key["noctrl" + e.keyCode];
if (fn) {
e.preventDefault();
fn();
}
});
您可以将代码放在一个单独的方法中,该方法在处理事件时返回true,否则返回false,那么您的事件处理程序如下所示
document.addEventListener("keydown", function(e) { // shortcuts
if (processShortcut(e))
{
e.preventDefault();
}
});
我有一种感觉,你可能会添加更多的动作,这样你就可以这样做:
document.addEventListener("keydown", (function() { // shortcuts
//return a closure that has actions in it's scope
var actions={
"82":{fn:newDoc},
"79":{fn:openDoc},
"83":{fn:saveDoc},
"66":{fn:function(){
//a closure here isn't needed if showHideStatusBar
// would check out the value of statusBarOn
showHideStatusBar(statusBarOn ? false : true);
}},
"191":{fn:function(){
alert("Welcome to " + appname + "!");
}},
"noctrl9":{fn:function(){
//var sStart = ....
// maybe this code is a good candidate to be put
// in it's own function as well
}}
};
return function(e){
if ((e.ctrlKey && actions[e.keyCode])
|| actions["noctrl"+e.keyCode]) {
e.preventDefault();
actions[keyCode].fn();
}
};
}()));
对于任何需要关闭的密钥,如StHeDeStestUsBar和TAG逻辑,可以考虑编写一个函数,它不需要参数,因为它简化了操作对象。您可以告诉默认返回,并在交换机之后设置EdvEntRebug,但是它有点混乱。你可以用这种方式使用document.addEventListener(“keydown”,函数(e){//shortcuts if(e.ctrlKey){//Ctrl+e.preventDefault();这将防止在Ctrl之后发生任何事件。像Ctrl+a一样,Ctrl+c将不起作用