Javascript 检查Tab键是否按下

Javascript 检查Tab键是否按下,javascript,jquery,Javascript,Jquery,我想检查Tab键是否被按下、按住并释放,以便我可以使用其他组合键执行其他操作 var shifted = false; var tabbed = false; $(document).on('keyup keydown', function(e) { shifted = e.shiftKey; tabbed = e.keyCode === 9; console.log(tabbed); }); 上面的代码对Shift键很有效,但对Tab键无效。按住

我想检查Tab键是否被按下、按住并释放,以便我可以使用其他组合键执行其他操作

var shifted = false;
var tabbed  = false;
 
$(document).on('keyup keydown', function(e) {        
  shifted = e.shiftKey;
  tabbed  = e.keyCode === 9;
    
  console.log(tabbed);
});

上面的代码对Shift键很有效,但对Tab键无效。按住Tab键时,选项卡变量应为true,释放时应为false。

如果要基于Tab键的向上/向下键切换选项卡值。以下是一个简明的解决方案:

var shifted = false;
var tabbed  = false;

$(document).on('keyup keydown', function(e) {        
    shifted = e.shiftKey;
    tabbed  = (e.keyCode === 9)?(!tabbed):tabbed; 
    
  console.log(tabbed);
});


使用以下命令来识别选项卡

tabbed  = (e.keyCode === 9 && e.type === 'keydown')?true:false;

如果问题应为问题,则回答问题而非问题:

描述键盘事件如何工作

一个向下键,重复=错误 多重按键按下,重复=真 一键启动 因此,您可以检查何时开始使用按键按下选项卡&&!重复上述步骤,并在停止使用keyup按住时按下

注意:您还必须取消该事件,以便它不会执行正确/预期的切换到下一个选项卡索引输入的行为,重点是选项卡实际应该执行的操作

它还可以更清晰地将事件分开,提供:

var-tabdown=false; $document.on'keydown',function e{ 如果e.keyCode==9{ tabdown=true; 返回false; }
如果tabdown&&e.keyCode>=49&&e.keyCode用户通过键盘导航时严重依赖[tab],那么为其分配您自己的任何其他功能是一个非常糟糕的主意。请注意[tab]键不是像shift/alt/control/winkey这样的修改键。它和其他任何键一样是一个普通键-这就像要求用户按住a键并按下另一个键一样。再加上@CBroe所说的,如果你使用tab键的目的不是管理焦点,那么这不是一个好主意。因为你在这里也使用shift键,我有一种感觉与可访问性有关。请确认。我想Tab以这种方式工作的问题是,与Shift键或大多数其他键不同,它将焦点移动到DOM上,并中断触发的键事件。我不认为有多少方法可以避免此问题-不是完全违反大多数可访问性规则是的。你能描述一下你想要达到的目标吗?因为这个解决方案离理想还很远,而且很可能有更好的替代方案。OP对我想检查Tab键是否被按下、按住并释放的描述中的哪一部分让你认为他们想在连续按下键时切换该值?我不确定我是否想要理解你所说的。它不是在按键时切换。如果按键按下,它将变为真,当按键释放时它将变为假。不,它不会,它会在连续按键时在真和假之间切换:。还要注意,OP希望检测按键按下的时间。正确。我通过添加几个按钮进行了测试,但在任何情况下如果按住键,焦点将移出。如果选中“重复”并取消默认的制表符操作,则此操作将有效。制表符=e.keyCode===9&&!e.originalEvent.repeat?!制表符:制表符;