Javascript document.onkeyup在不应';T

Javascript document.onkeyup在不应';T,javascript,keyboard-events,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

所以我有下面的代码,只要按下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>

var-key=false;
var keyDown=功能(e){
如果(e.keyCode==68){
key=true;
}
}
var keyUp=功能(e){
如果(e.keyCode==68){
key=false;
}
}
document.onkeydown=keyDown;
document.onkeyup=keyUp;
var run=function(){
document.getElementById('test').appendChild(document.createTextNode(key+'\n'));
t=设置超时('run()',25);
}
var t=setTimeout('run()',25);
保存代码,将其加载到浏览器中,然后按住d键。如果我没有发疯,你会看到它偶尔会附加'false',即使d键从未释放过。(我在Linux和Vista中的FF和Chrome中尝试过这一点)。有人知道原因或者有解决办法吗


编辑:在OS X中运行的FF中,它的行为似乎与预期一致。

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

您是否确实尝试过粘贴在此处的代码,或者正在使用其他可能有bug的代码

编辑

我刚刚用Chrome运行了这个。同样,它的行为符合预期


您使用的无线键盘是否易受干扰或电池电量不足的影响,不会影响正常键盘使用,但在本测试中会显示出来?

为什么不让您的keyUp功能在不符合预期的情况下转储出按键代码的实际内容?这只是将问题隔离为尽可能少的代码,所以我只使用了一个键作为例子。我正在处理一个更大的代码块,但成功地隔离了问题,这就是您在上面看到的代码。由于我没有使用IE,我忽略了添加逻辑,如果浏览器是IE,则使用event而不是e。我尝试了许多键盘、PS/2和USB。只是试了一次,在FF中显示false的频率似乎比Chrome(在Ubuntu中)要高一点,但在Chrome中仍然偶尔出现false。你让它在Chrome上运行了多少秒?我在Vista上的Chrome上运行了至少10秒。是的,它似乎在我的Vista中的Chrome上也能运行。也许这是Ubuntu的问题?因为你已经试过几个键盘,在Vista的同一个浏览器中都没有问题,所以我可以放心地将矛头指向Ubuntu。