JavaScript能够区分左右Shift键吗?

27

这主要是一种检查方法。对于两个shift键的关键代码均为16。这是否意味着在浏览器中无法区分左、右Shift事件?

4个回答

29

在支持DOM3的新版浏览器中,您可以使用event.location来检查位置。

DOM3规范中,定义了4个常量用于描述位置:DOM_KEY_LOCATION_STANDARDDOM_KEY_LOCATION_LEFTDOM_KEY_LOCATION_RIGHTDOM_KEY_LOCATION_NUMPAD

在这种情况下,您可以进行以下操作:

if (event.location === KeyboardEvent.DOM_KEY_LOCATION_LEFT){

} else if (event.location === KeyboardEvent.DOM_KEY_LOCATION_RIGHT){

}

你能给我展示完整的代码吗?我不知道如何执行它。 - Gijo Varghese
你会在浏览器的键盘事件处理程序中看到这个,其中事件处理函数的第一个参数是 event - loganfsmyth
没关系,我用另一种方式解决了。http://stackoverflow.com/questions/40320597/detect-left-or-right-shift-key-in-keypress-jquery/40320730?noredirect=1 - Gijo Varghese
这个答案仍然有效,但多年以来,在底部出现了一个新的好答案。 - Weavermount

5
您可以使用event.code(物理键盘字符串)代替event.key(数字ASCII值)。

event.code MDN文档

KeyboardEvent.code属性表示键盘上的一个物理按键(而不是按下该按键所生成的字符)。

如果您向下滚动到底部的“代码值”,则可以找到两个不同的Shift键:

"ShiftLeft""ShiftRight"


2

有一些不同。请在此问题的plunkr示例中检查:https://dev59.com/Y4rda4cB1Zd3GeqPRNDr相同的代码可以正常使用左Shift,但无法使用右Shift。 - gandra404

1

最简单的方法

$(document).ready(function(){
  $("html").keydown(function(e) {

      if (e.shiftKey) {
         if (event.location == 1) console.log('left shift');
         if (event.location == 2) console.log('right shift');
      }

  });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

注意:运行代码片段时,您必须单击内部的白色空间以激活键盘按键。这在Chrome和Safari中经过测试。

这在Firefox中有效,但在Chrome 92及以上版本(我测试过的版本)中总是显示“左移”。 - Matt Godbolt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接