我编写了一个简单的javascript代码,并为onKeyDown/onKeyUp添加了事件侦听器。它工作得很好,并根据需要检测控制键。但是,即使在使用OS快捷方式时,控制键也会显示按下。
具体来说,我在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);
});发布于 2014-07-17 05:22:44
如果您使用Ctrl来更改工作区,那么运行的窗口w/ js在keyup事件之前就会失去焦点。当窗口失去焦点时,可以将事件绑定到丢弃按键的窗口对象:
window.onblur =函数(){console.log(“模糊”);};
如果没有看到更多的代码,我就不能说更多了
发布于 2014-07-17 05:28:28
检测Control键的Control事件(或Alt或Shift事件)并不是标准做法。
你应该做的是找到你想要的键是否被按下。例如,如果要在按下Ctrl+S时保存某些内容,请查找S键。
var keyCode = (e.which) ? e.which : e.keyCode; // keyCode will be 'S'
if (e.ctrlKey && keyCode == 83) {
// Ctrl + S pressed. Do stuff.
}https://stackoverflow.com/questions/24795306
复制相似问题