繁体   English   中英

Javascript onKeyDown函数

[英]Javascript onKeyDown function

我编写了一个简单的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事件之前失去焦点。 您可以将事件绑定到窗口对象,只要窗口失去焦点就会丢弃keydown:

window.onblur = function(){console.log(“blur”);};

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

检测Control键的KeyDown事件(或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.
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM