在javascript中处理特殊键的事件

时间:2016-01-18 13:22:17

标签: javascript events onkeydown

我在我的网络应用程序中覆盖了onkeyup和onkeydown函数,我想使用键盘的暂停/中断键。

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

以下脚本应该清楚地演示这种行为。 首先按住空格键。在您将手从空格键上移开之前,不会弹出警报。然后使用暂停/中断键尝试相同的操作,并在按下键时立即收到警报。

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");
    }  
}

提前致谢

1 个答案:

答案 0 :(得分:2)

好像是我的键盘! 我使用戴尔和惠普键盘检查了脚本,并没有任何意外行为。

在进一步调查后,我发现一些键盘(如我的)处理暂停/中断和打印屏幕/ sysrq键的报告,就像我描述的那样。按下时发送keydown和keyup序列,释放时不发送任何内容。

本文介绍了类似的行为:

Keyboard Scancodes - Special Keyboards