【问题标题】:Prototype observe event problem in OperaOpera 中的原型观察事件问题
【发布时间】:2011-02-04 15:03:37
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: javascript prototypejs opera


    【解决方案1】:

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

    其次,您应该知道 keydown(或 keyup)和 keypress 之间存在区别。 keypress 通常不允许修饰键,尽管它确实允许在 Opera 中进行一些控制。最好使用 keydown 来实现跨浏览器的一致性。

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

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

    或者直接使用native方法(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 来授予对应用程序菜单栏的访问权限。

    您可以尝试使用控制键并使用 preventDefault()(以避免像 ctrl-f 进行页面查找这样的默认行为),但这可能会惹恼那些可能不希望为您的页面禁用浏览器行为的用户。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-06-26
        • 1970-01-01
        • 2013-06-14
        • 1970-01-01
        • 2020-06-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多