小编Ell*_*nes的帖子

Javascript:Keydown事件:"向上"箭头键阻止进一步的箭头键Keydown事件?(回答:键盘鬼影)

我发现了很多相关问题(这里和其他地方),但没有找到具体问题.

我正在尝试为箭头键(37-40)监听keydown事件,但是当按特定顺序使用箭头键时,后续箭头不会生成"keydown"事件.

示例:http: //blog.pothoven.net/2008/05/keydown-vs-keypress-in-javascript.html

  1. 在该页面上,单击"在此处键入 - >"框.
  2. 按住右箭头键:表格更新为键码39
  3. 在继续按住右箭头键的同时,按住箭头键:表更新为38
  4. 在继续按住向上和向上箭头键的同时,按住左箭头键:表格不会更新

但是,如果我做同样的事情,但使用向下箭头键而不是向上箭头键,那么它按预期工作.

此外,如果我使用键盘而不是箭头键,它会按预期工作.

我阻止keydown事件的正常操作(通过在事件监听器中返回false,并通过调用preventDefault()),但行为仍然存在.

我以为它可能是我的键盘,但它发生在笔记本电脑和朋友的机器上.

有没有人对什么事情有任何见解?或者一些关于变通方法的好主意?

[编辑]这是我的意思的一个例子.我意识到这可能不适用于所有浏览器,但我只是把它放在我的笔记本电脑上,以展示我发生了什么(在w7上的chrome以及mac os 10.6.8上的chrome和safari)

<html>
<body>
<script>

var keysDown = {};
addEventListener("keydown", function(e) {
    keysDown[e.keyCode] = true;
    document.getElementById('latestKeydown').value=e.keyCode;
}, false);

addEventListener("keyup",function(e){
    delete keysDown[e.keyCode];
}, false);

var loop = function(){
    document.getElementById('upinput').value=keysDown[38];
    document.getElementById('downinput').value=keysDown[40];
    document.getElementById('leftinput').value=keysDown[37];
    document.getElementById('rightinput').value=keysDown[39];
}

setInterval(loop,1);

</script>
Up: <input id="upinput" type=text size=10><br />
Down: <input id="downinput" type=text size=10><br />
Left: <input id="leftinput" type=text size=10><br />
Right: <input id="rightinput" type=text …
Run Code Online (Sandbox Code Playgroud)

html javascript keyboard keydown onkeydown

9
推荐指数
1
解决办法
3855
查看次数

标签 统计

html ×1

javascript ×1

keyboard ×1

keydown ×1

onkeydown ×1