我编写了一个简单的 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);
});

最佳答案

如果您使用 Ctrl 来更改工作区,那么您的窗口 w/js 运行在 keyup 事件之前失去焦点。
您可以将事件绑定(bind)到 window 对象,该事件在窗口失去焦点时丢弃 keydown:



没有看到更多你的代码,我不能说更多

关于Javascript onKeyDown 函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24795306/

10-12 07:19