【问题标题】:Why keydown listener doesn't work in IE为什么keydown监听器在IE中不起作用
【发布时间】:2012-03-19 09:58:48
【问题描述】:

我试图在 IE 8 中运行它,但它不起作用,知道吗?它适用于 Firefox、Chrome、Opera...

preventBackspace();

function preventBackspace() {
    try {
        if (window.addEventListener) {
            window.addEventListener("keydown", onKeyDown, true);
        } else if (window.attachEvent) { // IE 
            alert(window);
            window.attachEvent("onkeydown", onKeyDown);
        } else {
            document.addEventListener("keydown", onKeyDown, true);
        }
        } catch (e) {
            alert(e);
    }
}

function onKeyDown(e) {
    alert("test!");
}

jsfiddle:

http://jsfiddle.net/ubfBq/

定义了window.attachEvent并添加了事件监听器。但它从不显示“测试!”警告。

我读了一些关于 useCapture 标志的东西,它可以在其他方法中使用。它在事件“关闭”之前捕获窗口上的按键。 Internet Explorer 似乎不允许/使用它。那是问题吗?如果是,我该如何解决?

【问题讨论】:

  • 您可以更好地使用 jQuery 而不是重新发明轮子。它使用称为 IE 的糟糕浏览器解决了许多不同的问题
  • 是的,这是 flex 项目中一个非常小的 javascript 部分,我不想只为几个方法加载 JQuery。
  • 好的,但我认为这是一个错误的论点,当解决方案已经存在时,您自己就会产生问题。
  • 为什么是假的,如果我认为使用 JQuery 有意义我会,但我不会仅仅因为 1 或 2 个函数而添加库。
  • 我知道你在说什么,我也理解其中的原因,但我知道一切都是从“小”开始的,并且将来会发展,因为它需要更多的功能。你会做什么,你添加一个框架。问题在于使用框架时不需要的额外代码(从长远来看,您将获得相同事物的不同实现)。这就是我想说的。我已经看过太多次了。这么多公司重写了那里的软件,因为几年后它变得一团糟。

标签: javascript internet-explorer events onkeydown


【解决方案1】:

似乎只有IE9及更高版本支持在keydown上绑定keydown:http://www.quirksmode.org/dom/events/keys.html#t00

相反,将其绑定到 IE 的 document

function preventBackspace() {
    try {
        if (window.addEventListener) {
            window.addEventListener("keydown", onKeyDown, true);
        } else if (document.attachEvent) { // IE 
            alert(document);
            document.attachEvent("onkeydown", onKeyDown);
        } else {
            document.addEventListener("keydown", onKeyDown, true);
        }
    } catch (e) {
        alert(e);
    }
}

【讨论】:

  • 谢谢,这也是正确的,更广泛,但另一个人是正确的,首先:)
【解决方案2】:

改用 document.attachEvent。 :]

【讨论】:

    猜你喜欢
    • 2011-11-28
    • 2014-06-11
    • 2011-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多