原型在Opera中观察事件问题

стр*_*гор 5 javascript opera prototypejs

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

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

我的代码正在使用firefox,IE和chrome.随着Opera没有.输入是catched,但仅当我的焦点不在任何文本输入中时.Alt + F根本不起作用.

它是原型中的错误还是我需要在Opera上做一些"额外"的事情才能继续?正如我所说,在所有其他浏览器我的代码工作....

Bre*_*mir 2

首先,以下是有用的资源:http ://unixpapa.com/js/key.html

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

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

Event.observe(document, 'keydown', function (e) {
    alert(e.charCode+'::'+e.keyCode);
});
Run Code Online (Sandbox Code Playgroud)

或者直接使用本机方法(对于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);
    });
}
Run Code Online (Sandbox Code Playgroud)

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

您可以尝试使用 control 键并使用 PreventDefault() (以避免使用 ctrl-f 进行页面查找等默认行为),但这可能会惹恼您的用户,他们可能不希望在您的页面上禁用其浏览器行为。