在 javascript 中处理特殊键的事件
Handle special keys' events in javascript
我在我的 Web 应用程序中覆盖了 onkeyup 和 onkeydown 函数,我想使用键盘的 pause/break 键。
但这似乎是一个特殊的键并且有一个奇怪的行为。在 keydown 事件之后,它会立即触发 keyup,即使您使用 preventDefault() 和 stopPropagation() 方法也是如此。
以下脚本应清楚地演示行为。
先按住space栏。在您的手离开 space 键之前,不会弹出任何警报。然后尝试使用 pause/break 键进行相同操作,您应该会在按下该键后立即收到警报。
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");
}
}
提前致谢
好像是我的键盘!
我使用 Dell 和 HP 键盘检查了脚本,没有出现任何意外行为。
进一步调查后,我发现有报告称某些键盘(如我的)像我描述的那样处理 pause/break 和打印 screen/sysrq 键。按下时发送 keydown 和 keyup 序列,释放时不发送任何内容。
这篇文章描述了类似的行为:
我在我的 Web 应用程序中覆盖了 onkeyup 和 onkeydown 函数,我想使用键盘的 pause/break 键。
但这似乎是一个特殊的键并且有一个奇怪的行为。在 keydown 事件之后,它会立即触发 keyup,即使您使用 preventDefault() 和 stopPropagation() 方法也是如此。
以下脚本应清楚地演示行为。 先按住space栏。在您的手离开 space 键之前,不会弹出任何警报。然后尝试使用 pause/break 键进行相同操作,您应该会在按下该键后立即收到警报。
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");
}
}
提前致谢
好像是我的键盘! 我使用 Dell 和 HP 键盘检查了脚本,没有出现任何意外行为。
进一步调查后,我发现有报告称某些键盘(如我的)像我描述的那样处理 pause/break 和打印 screen/sysrq 键。按下时发送 keydown 和 keyup 序列,释放时不发送任何内容。
这篇文章描述了类似的行为: