我已经在我的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 回答
好像是我的键盘!我使用Dell和HP键盘检查了脚本,没有任何意外行为 .
在进一步调查后,我发现一些键盘(如我的)处理暂停/中断和打印屏幕/ sysrq键的报告,就像我描述的那样 . 按下时发送keydown和keyup序列,释放时不发送任何内容 .
本文介绍了类似的行为:
Keyboard Scancodes - Special Keyboards