【问题标题】:Onkeydown event firing in IE and Chrome but not FireFox在 IE 和 Chrome 中触发 Onkeydown 事件,但在 FireFox 中没有触发
【发布时间】:2012-02-10 21:05:26
【问题描述】:

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

为了您的方便,我相信这里是所有涉及的代码:

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 中运行良好。

【问题讨论】:

    标签: javascript html canvas events keyboard


    【解决方案1】:

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

    尝试在文档而不是正文上绑定事件。另外:尽量不要使用“onevent”属性,而是在脚本块内创建事件监听器。

    【讨论】:

    • 我正在使用这些属性,因为我认为我看到一些网站建议使用它以实现跨浏览器兼容性。但是现在我找不到了。尽管如此,我已经通过删除 onevent 属性并添加诸如“document.onkeydown = keyboardState.handleKeyDown;”之类的代码来实现您的建议并且事情似乎在所有浏览器中都有效。谢谢。
    猜你喜欢
    • 2013-12-20
    • 1970-01-01
    • 2010-11-06
    • 2012-05-10
    • 1970-01-01
    • 2016-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多