Javascript JS在没有事件对象的情况下检测按键

Javascript JS在没有事件对象的情况下检测按键,javascript,jquery,Javascript,Jquery,我有一个javascript应用程序,当按键事件包含一个控制键(CTRL、CMD、SHIFT)时,它会进入一种特殊状态。当keyup事件触发时,应用程序将离开状态 当前代码如下所示: $(window).keydown -> if [16, 17, 91, 93, 224].indexOf(e.which) >= 0 # CMD, CTRL, Shift # Enter special mode $(window).keyup -> if [16, 17, 9

我有一个javascript应用程序,当按键事件包含一个控制键(CTRL、CMD、SHIFT)时,它会进入一种特殊状态。当keyup事件触发时,应用程序将离开状态

当前代码如下所示:

$(window).keydown ->
  if [16, 17, 91, 93, 224].indexOf(e.which) >= 0 # CMD, CTRL, Shift
    # Enter special mode

$(window).keyup ->
  if [16, 17, 91, 93, 224].indexOf(e.which) >= 0 # CMD, CTRL, Shift
    # Exit special mode
问题是,例如,如果按CTRL/CMD+T打开一个新选项卡,应用程序将进入此状态,但它从未收到keyup事件,因此不会离开它,除非再次按CMD键


理想的做法是,当按下诸如CMD+T之类的键时,防止选择模式被激活,但作为一种解决方法,启动一个检查键是否仍被按下的循环是可以的。问题是,在没有事件出现的情况下,如何检查按键是否仍然按下?

当窗口模糊时,您是否尝试过退出特殊模式?你可以在超时时这样做,因为窗口被留下,它们开始堆积。像这样:

$(window).blur(function(){
    // escape special mode
});

这允许您在窗口未聚焦时取消设置任何继续运行的内容。您还可以使用
$(窗口)返回任何已释放的触发器。使用
.timeout()
或类似的方法聚焦
事件。

?您没有意识到按键事件会告诉您这些按键是否已按下吗?