JS keydown + 按键 + preventDefault

JS keydown + keypress + preventDefault

我们有:

  1. keydown 事件 + preventDefault 防止 keypress 事件(证明:
  2. stopPropagation 一点用都没有
  3. 我们无法使用 dispatchEvent 模拟按键,因为我们不知道不可打印的 event.key 值的完整列表(我们不能使用 event.key.codePointAt(0) 将其作为 unicode 值抛出)

我们需要什么:

  1. 禁用默认浏览器按键反应(即 tab 按下 chrome),无需巨大的开关表达式

  2. 检测keydown事件,因为我们需要shiftctrl等按键事件 (event.code 重要)

  3. 检测keypress事件,因为我们需要在没有input事件的情况下输入unicode字符(event.key很重要)不检查它是否是不可打印的字符(例如 shiftctrl

如何?

更新: 似乎非 unicode event.key 的长度大于 1(来源:) 有证据吗?

这样解决的:

    window.addEventListener('keydown', function (event)
        {
            onKeyboard(event.code);
            if (event.key.length === 1 && !event.ctrlKey && !event.metaKey)
            {
                const utf16Code = event.key.codePointAt(0);
                onKeyboardInput(utf16Code);
            }
            event.preventDefault();
        }, false);