document.onkeyup在不应该触发的时候触发

时间:2010-04-01 20:06:39

标签: javascript keyboard-events

所以我有以下代码,只要按下键68(d键),它应该每25ms向div“test”追加'true',对吗?

<html>
<body>
<div id="test"></div>
<script type="text/javascript">
var key=false;
var keyDown=function(e) {
 if (e.keyCode==68) {
  key=true;
 }
}
var keyUp=function(e) {
 if (e.keyCode==68) {
  key=false;
 }
}
document.onkeydown=keyDown;
document.onkeyup=keyUp;
var run=function() {
 document.getElementById('test').appendChild(document.createTextNode(key+'\n'));
 t = setTimeout('run()', 25);
}
var t = setTimeout('run()', 25);
</script>
</body>
</html>

保存代码,将其加载到浏览器中并按住d键。如果我不是疯了,你会发现它偶尔会附加'假',即使d键从未被释放过。 (我在Linux和Vista中用FF和Chrome试过这个)。有人碰巧知道原因,或者有解决方法吗?

编辑:在OS X中运行的FF中似乎表现得如预期的那样。

1 个答案:

答案 0 :(得分:0)

我刚刚在IE7中尝试过它。将“e.keyCode”更改为“event.keyCode”后,它就像您预期的那样工作。

您是否真的尝试过在此处粘贴的代码,或者您是否正在处理可能存在错误的其他代码?

修改

我刚刚在Chrome中运行了这个。同样,它的行为与预期一致。

您使用的无线键盘是否容易受到干扰或电池无力,这些键盘不会影响正常的键盘使用,但在此测试中是否可见?