Opera 中的原型观察事件问题

发布于 2024-10-16 01:34:53 字数 311 浏览 4 评论 0原文

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

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

我的代码在 Firefox、IE 和 Chrome 上运行得非常好。与歌剧没有。 Enter 被捕获,但前提是我的焦点不在任何文本输入中。 Alt+F 根本不起作用。

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

I'm using Prototype and doing Event.observe on window.document.

I'm catching enter (keyCode 13) and alt+f (altKey && keyCode=70).

My code is working super with firefox, IE and chrome. With Opera no. Enter is catched, but only if my focus is not in any text input. Alt+F is not working at all.

Is it bug in Prototype or I need to do something 'extra' on Opera in order to go on? As i said, in all other browser my code works....

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

安人多梦 2024-10-23 01:34:53

首先,以下是有用的资源: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);
});

或直接使用本机方法(对于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 来访问应用程序菜单栏。

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

Firstly, the following is a helpful resource: http://unixpapa.com/js/key.html

Secondly, you should know there is a difference between keydown (or keyup) and keypress. keypress does not typically allow modifier keys, though it does allow some in Opera like control. Better to use keydown for cross-browser consistency.

I get keyCode === 13 in Opera 11.10 no matter whether the textbox is entered or not, and no matter whether using Prototype like this:

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

or using the native method directly (using 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);
    });
}

However, alt is indeed not detected inside a textbox unless combined with a control or function key (though that doesn't work in Chrome or IE). This may be because Windows uses alt to give access to the applications menu bar.

You could try using control key and using preventDefault() (to avoid default behaviors like ctrl-f doing a page find) though this might annoy your users who might not want their browser behaviors disabled for your page.

神回复 2024-10-23 01:34:53

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

Alt-F activates the menu and Opera doesn't let JavaScript handle this key press.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文