2012-01-15 211 views
0

为什么我的键盘交互代码在IE和Chrome中正确运行,但不是FireFox?完整的代码是http://sgdk2.enigmadream.com/ben/Html5Sample.html。随意在本地下载和编辑文件来测试更正(请跳过正确答案的错误答案:))。它在一个HTML文件中完全独立100%。Onkeydown事件在IE和Chrome中触发但不是FireFox

为了您的方便,在这里,我相信,这是所有参与代码:

var keyboardState; 
keyboardState = new Object(); 
keyboardState.key= { None:0, Enter:13, Shift:16, 
/* etc... */}; 

keyboardState.keyState = new Array(); 
keyboardState.handleKeyDown = function(e) { 
    e = e || window.event; 
    keyboardState.keyState[e.keyCode] = true; 
}; 


keyboardState.handleKeyUp = function(e) { 
    e = e || window.event; 
    keyboardState.keyState[e.keyCode] = false; 
}; 

keyboardState.isKeyPressed = function(key) { return keyboardState.keyState[key]; }; 

...

<body class="unselectable" unselectable="on" 
onkeydown="keyboardState.handleKeyDown(event)" 
onkeyup="keyboardState.handleKeyUp(event)"> 

似乎handleKeyDown甚至没有开火,如果我调试这个权利。这必须非常接近正确,因为它在IE和Chrome中运行良好。

回答

1

prototype/javascript - firefox not firing keypress/keydown event unless focus is in textbox

尝试在文档而不是身体的结合事件。另外:尽量不要使用'onevent'属性,但在脚本块内部创建事件监听器。

+0

我使用的属性,因为我认为我看到一些网站建议它跨浏览器兼容性。但现在我找不到它。不过,我已通过删除onevent属性并添加代码(如“document.onkeydown = keyboardState.handleKeyDown;”)来实现您的建议而且事情似乎在所有浏览器中都起作用。谢谢。 – BlueMonkMN 2012-01-15 17:32:35

相关问题