在JavaScript中处理同时按下的多个键

在JavaScript中处理同时按下的多个键,javascript,keydown,shift,keycode,Javascript,Keydown,Shift,Keycode,上下文:这是一个运行在Xbox One上的JavaScript应用程序。所有这些都是通过Xbox的虚拟键盘实现的。请记住,既然我已经知道了事件是如何触发的,这就不再重要了,只需要知道如何同时处理这两个事件 实际上并不是多个键,当我为我的应用程序打开CAPS时,我会同时得到两个事件键:shift和我实际按下的任何键。这导致的问题是shift似乎覆盖了我试图拼写的任何内容,并且输入框中没有显示任何键 我目前有一个全球功能,负责应用程序中的所有特殊事件,我想从那里处理这个问题,但不知道如何处理这个问题

上下文:这是一个运行在Xbox One上的JavaScript应用程序。所有这些都是通过Xbox的虚拟键盘实现的。请记住,既然我已经知道了事件是如何触发的,这就不再重要了,只需要知道如何同时处理这两个事件

实际上并不是多个键,当我为我的应用程序打开CAPS时,我会同时得到两个事件键:
shift
和我实际按下的任何键。这导致的问题是shift似乎覆盖了我试图拼写的任何内容,并且输入框中没有显示任何键

我目前有一个全球功能,负责应用程序中的所有特殊事件,我想从那里处理这个问题,但不知道如何处理这个问题

以下是我目前拥有的:

// this is the global function where I would like to solve the issue
onStartup(function () {
  var $html = $('html')
  $html.on('keydown', function (evt) {
    if (evt.isDefaultPrevented()) return

    console.warn('key being pressed:', evt.keyCode)
    if (evt.keyCode === 16) { // Note: 16 is shift's keycode
      // do something to prevent shift from overriding the actual key I want to press.
      return
    }
  })
})
当我在未打开CAPS的情况下按一个键时,比如说
a
,它的keyCode为65,我们有以下输出:

按键:65

但是,如果我尝试使用大写字母
a
(或
a
),则会发生以下情况:

正在按下的键:16

按键:65


我该怎么做才能防止轮班妨碍我实际键入大写键呢?

我想出来了!我所要做的就是当
shift
被触发时,调用
evt.stopImmediatePropagation()

基本上,对于我的代码:

// ...
if (keycodeControls.is('shift', evt)) {
   evt.stopImmediatePropagation()
}

CAPS
SHIFT
不同。您只需使用
if(evt.shiftKey)…测试
keydown
事件期间按下的SHIFT键即可。
我可能应该编辑我的描述。。。这是一个用JavaScript编写的XBox应用程序,当在虚拟键盘上打开CAPS时,就会出现问题。我知道他们通常受到不同的对待,但这就是这个平台正在发生的事情。