我有一个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之类的东西时阻止选择模式被激活,但是启动一个循环来检查是否仍然按下该键也可以作为一种解决方法。问题是,如何在没有事件的情况下检查按键是否仍然按下?
答案 0 :(得分:3)
当窗口模糊时,你是否尝试过特殊模式?您可以为超时执行此操作,并且窗口被遗忘并且它们开始堆积。像这样:
$(window).blur(function(){
// escape special mode
});
这允许您在窗口未聚焦时取消设置任何继续运行的内容。您还可以使用$(window).focus
事件返回任何已发布的触发器。