Javascript 歌剧中的原型观察事件问题

Javascript 歌剧中的原型观察事件问题,javascript,prototypejs,opera,Javascript,Prototypejs,Opera,我正在使用原型并在window.document上执行Event.observe 我正在捕捉enter(键码13)和alt+f(altKey&&keyCode=70) 我的代码在firefox、IE和chrome上运行得非常好。对于Opera no.Enter,只有当我的焦点不在任何文本输入中时,才能捕获。Alt+F根本不起作用 这是原型中的bug还是我需要在Opera上做一些额外的事情才能继续?正如我所说,在所有其他浏览器中,我的代码都能正常工作……首先,以下是一个有用的资源: 其次,您应该知

我正在使用原型并在window.document上执行Event.observe

我正在捕捉enter(键码13)和alt+f(altKey&&keyCode=70)

我的代码在firefox、IE和chrome上运行得非常好。对于Opera no.Enter,只有当我的焦点不在任何文本输入中时,才能捕获。Alt+F根本不起作用


这是原型中的bug还是我需要在Opera上做一些额外的事情才能继续?正如我所说,在所有其他浏览器中,我的代码都能正常工作……

首先,以下是一个有用的资源:

其次,您应该知道keydown(或keyup)和keypress之间有区别。keypress通常不允许修改键,尽管它允许一些类似于Opera的控件。最好使用keydown实现跨浏览器的一致性

在Opera 11.10中,无论是否输入文本框,无论是否使用如下原型,我都会得到keyCode===13:

Event.observe(document, 'keydown', function (e) {
    alert(e.charCode+'::'+e.keyCode);
});
或者直接使用本机方法(使用IE的attachEvent):

然而,除非与控件或功能键结合使用(尽管在Chrome或IE中不起作用),否则在文本框中确实不会检测到alt。这可能是因为Windows使用alt来访问“应用程序”菜单栏


您可以尝试使用control键和preventDefault()(以避免出现诸如ctrl-f进行页面查找之类的默认行为),但这可能会激怒您的用户,他们可能不希望为您的页面禁用浏览器行为。

Alt-f激活菜单,Opera不允许JavaScript处理此按键

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);
    });
}