原型在Opera中观察事件问题

时间:2011-02-04 15:03:38

标签: javascript prototypejs opera

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

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

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

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

2 个答案:

答案 0 :(得分:2)

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

其次,您应该知道keydown(或keyup)和keypress之间存在差异。 keypress通常不允许修改键,虽然它确实允许一些像Opera一样控制。最好使用keydown来实现跨浏览器的一致性。

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

Event.observe(document, 'keydown', function (e) {
    alert(e.charCode+'::'+e.keyCode);
});

或直接使用本机方法(使用attachEvent for IE):

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来访问应用程序菜单栏。

您可以尝试使用控制键并使用preventDefault()(以避免执行页面查找等ctrl-f之类的默认行为),但这可能会让您的用户感到烦恼,因为他们可能不希望为您的页面禁用其浏览器行为。

答案 1 :(得分:0)

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