以下在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>
编辑:“不工作”我的意思是myEventHandler没有在firefox中启动。
EDIT2:此外,当焦点在输入元素上时,它可以正常工作。我想为所有的keydowns开火。
答案 0 :(得分:7)
我不知道为什么你的代码不起作用,但它太复杂了 - 这应该可以解决问题:
document.observe('keydown', myEventHandler);
由于load
可以立即使用,因此无需等待document
。
您的代码无效,因为并非所有关键事件都来自文档的body元素。 Opera有类似Firefox中的问题,但原始元素似乎还取决于鼠标光标的位置。
无论如何,修复只是捕获document
级别的事件,因为只要没有人阻止他们这样做,所有DOM事件最终都会冒出document
。
答案 1 :(得分:3)
我还发现我的keydown事件没有在Firefox中针对类似代码触发。在我的情况下,我不需要使用Safari和Firefox以外的任何东西,所以我没有在IE上测试过这个。然而,观察'文档'而不是'document.body'似乎有效:
document.observe('dom:loaded', function() {
Event.observe(document, 'keypress', function(evt) {
alert("In Keypress Function");
});
});
现在,我意识到这是观察按键,而不是keydown。 AFAIK,keypress在keydown之后生成。
答案 2 :(得分:0)
尝试使用表单元素包装输入。如果这没有帮助,请在div中扭曲它并将处理程序附加到div。
答案 3 :(得分:0)
顺便说一下,对于tab,esc等,你需要使用keyup,而不是keypress。至少对于Safari来说,花了我一段时间才想出那个。
在anon中添加以下行:alert ("Key :" + evt.keyCode);
。功能。只有字形才会响应。
- 戴夫