prototype/javascript - firefox没有触发keypress/keydown事件,除非焦点在文本框中

Chl*_*hil 3 javascript events prototypejs

以下适用于IE6,IE7和chrome.不适用于ff 3.0.7.

<html><head>
<script src="prototype.js" type="text/javascript" ></script>
<script type="text/javascript">
Event.observe(window, 'load', 
    function(){
        Event.observe(document.body, 'keydown', myEventHandler);
        alert('window load');
    });
function myEventHandler(evt) {
    alert(evt);
}
</script>
</head>
<body >
<input type="text" /><br><br>
</body></html>
Run Code Online (Sandbox Code Playgroud)

编辑:通过"不工作"我的意思是myEventHandler没有在Firefox中触发.

EDIT2:此外,当焦点在输入元素上时,它工作正常.我想要为所有的keydowns开火.

Chr*_*oph 7

我不知道为什么你的代码不起作用,但它过于复杂 - 这应该做的伎俩:

document.observe('keydown', myEventHandler);
Run Code Online (Sandbox Code Playgroud)

有没有需要等待loaddocument立即可用.


您的代码不起作用,因为并非所有关键事件都源自文档的body元素.Opera有类似于Firefox中的问题,但原始元素似乎还取决于鼠标光标的位置.

无论如何,修复只是捕获事件的document级别,因为只要没有人阻止他们这样做,所有DOM事件document最终都会冒出来.