我正在使用Prototype并在window.document上做Event.observe。
我正在捕获enter (keyCode 13)和alt+f (altKey && keyCode=70)。
我的代码在firefox,IE和chrome上运行的很好。使用Opera no.Enter被捕获,但仅当我的焦点不在任何文本输入中时。Alt+F完全不起作用。
是原型中的bug,还是我需要在Opera上做一些“额外”的事情才能继续?正如我所说的,在所有其他浏览器中,我的代码都可以工作……
发布于 2011-05-27 11:38:41
首先,下面是一个有用的资源:http://unixpapa.com/js/key.html
其次,你应该知道keydown (或者keyup)和keypress是有区别的。按键通常不允许修改键,尽管它允许一些类似于Opera的控件。为了保持跨浏览器的一致性,最好使用keydown。
我在Opera11.10中得到keyCode === 13,无论是否输入文本框,也不管是否使用Prototype,如下所示:
Event.observe(document, 'keydown', function (e) {
alert(e.charCode+'::'+e.keyCode);
});或者直接使用本机方法(使用IE的attachEvent ):
if (document.addEventListener) {
document.addEventListener('keydown', function (e) {
alert(e.charCode+'::'+e.keyCode);
}, false);
}
else { // IE
document.attachEvent('onkeypress', function (e) {
alert(e.charCode+'::'+e.keyCode);
});
}然而,除非与控制键或功能键相结合,否则文本框中确实无法检测到alt (尽管这在Chrome或IE中不起作用)。这可能是因为Windows使用alt来访问应用程序菜单栏。
您可以尝试使用ctrl键和preventDefault() (以避免默认行为,如ctrl-f执行页面查找),尽管这可能会惹恼您的用户,他们可能不希望您的页面禁用他们的浏览器行为。
发布于 2012-01-04 07:38:19
Alt-F激活菜单,Opera不让JavaScript处理此按键操作。
https://stackoverflow.com/questions/4899453
复制相似问题