首页 文章

在javascript中处理特殊键的事件

提问于
浏览
0

我已经在我的Web应用程序中覆盖了onkeyup和onkeydown函数,我想使用键盘的暂停/中断键 .

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

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

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 回答

  • 2

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

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

    本文介绍了类似的行为:

    Keyboard Scancodes - Special Keyboards

相关问题