我已经在我的 Web 应用程序中覆盖了 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");
}
}
提前致谢
是我的键盘!我使用戴尔和惠普键盘检查了脚本,没有任何意外行为。
经过进一步调查,我发现有报告称某些键盘(如我的键盘)会像我描述的那样处理暂停/中断和打印屏幕/sysrq 键。按下时同时发送键控和键控序列,释放时不发送任何内容。
本文描述了类似的行为:
键盘扫描码 - 特殊键盘