在JavaScript中一次处理多个键

时间:2018-04-13 18:02:22

标签: javascript keydown shift keycode

对于上下文:这是在Xbox One中运行的JavaScript应用程序。所有这一切都通过Xbox的虚拟键盘发生。请记住,既然我已经弄清楚事件是如何被解雇的,那就不再重要了,只是如何同时处理这两个事件。

这不是真正的多个键,发生的事情是当我打开我的应用程序的CAPS时,我一次得到两个事件键: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

我该如何阻止阻止我实际输入大写字母?

1 个答案:

答案 0 :(得分:1)

我明白了!我所要做的就是在shift被解雇时,拨打evt.stopImmediatePropagation()

基本上,对于我的代码:

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