我编写了一个简单的javascript代码,并为onKeyDown/onKeyUp
添加了事件监听器。它工作正常,并根据需要检测Control键。但是,即使我使用的是操作系统快捷方式,Control键也会显示。
具体来说,我在Ubuntu上并使用Ctrl+Alt+ arrow keys
来切换工作区。因此,当我切换工作区并返回Chrome时,它会显示已按下Control
键。
我不介意,但即使释放快捷键,也不会调用onkeyup
方法,因此状态显示Ctrl
键被按下。
我该如何避免这种情况?
以下是我的代码:
function keypressedfn(e){
if(e.which == CTRL_KEY){
console.log("isCtrl pressed");
isCtrl=true;
if(isWheel){
e.preventDefault();
e.stopPropagation();
}
}
};
function keyreleasedfn(e){
if(e.which == CTRL_KEY){
console.log("isCtrl released");
isCtrl=false;
isWheel=false;
}
};
$(document).ready(function(){
$(document).keydown(keypressedfn);
$(document).keyup(keyreleasedfn);
});
答案 0 :(得分:2)
如果你使用Ctrl来更改工作区,那么运行w / js的窗口会在keyup事件之前失去焦点。 你可以将一个事件绑定到窗口对象上,只要窗口失去焦点就会丢弃keydown:
window.onblur = function(){console.log(" blur");};
如果没有看到更多代码,我就不能说出那么多
答案 1 :(得分:1)
在此问题上,检测KeyDown
密钥(或Control
或Alt
的{{1}}事件并非标准做法。
您应该做的是查找是否按下了所需的键。例如,如果您想在按下Shift
时保存某些内容,请查找Ctrl+S
键。
S