我在我的网络应用程序中覆盖了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");
}
}
提前致谢
答案 0 :(得分:2)
好像是我的键盘! 我使用戴尔和惠普键盘检查了脚本,并没有任何意外行为。
在进一步调查后,我发现一些键盘(如我的)处理暂停/中断和打印屏幕/ sysrq键的报告,就像我描述的那样。按下时发送keydown和keyup序列,释放时不发送任何内容。
本文介绍了类似的行为: