在 javascript 中处理特殊键的事件

Handle special keys' events in javascript

我在我的 Web 应用程序中覆盖了 onkeyup 和 onkeydown 函数,我想使用键盘的 pause/break 键。

但这似乎是一个特殊的键并且有一个奇怪的行为。在 keydown 事件之后,它会立即触发 keyup,即使您使用 preventDefault() 和 stopPropagation() 方法也是如此。

以下脚本应清楚地演示行为。 先按住space栏。在您的手离开 space 键之前,不会弹出任何警报。然后尝试使用 pause/break 键进行相同操作,您应该会在按下该键后立即收到警报。

https://jsfiddle.net/at3L9o73/2/

window.onkeydown = keydown;
window.onkeyup = keyup;
function keydown(event)
{   
    if(event.keyCode == 19)
    {
        event.preventDefault();
        event.stopPropagation();
        console.log("break down");
    }
  else if(event.keyCode == 32)
    {
        event.preventDefault();
        event.stopPropagation();
        console.log("space down");
    }
}
function keyup(event)
{   
    if(event.keyCode == 19)
    {
        event.preventDefault();
        event.stopPropagation();
        console.log("break up");
    window.alert("break keyp????");
    }
  else if(event.keyCode == 32)
    {
        event.preventDefault();
        event.stopPropagation();
        console.log("space up");
    window.alert("space keyp");
    }  
}

提前致谢

好像是我的键盘! 我使用 Dell 和 HP 键盘检查了脚本,没有出现任何意外行为。

进一步调查后,我发现有报告称某些键盘(如我的)像我描述的那样处理 pause/break 和打印 screen/sysrq 键。按下时发送 keydown 和 keyup 序列,释放时不发送任何内容。

这篇文章描述了类似的行为:

Keyboard Scancodes - Special Keyboards