为什么keydown监听器在IE中不起作用

Ixx*_*Ixx 5 javascript events internet-explorer onkeydown

我试图在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!");
}
Run Code Online (Sandbox Code Playgroud)

的jsfiddle:

http://jsfiddle.net/ubfBq/

定义了window.attachEvent并添加了事件侦听器.但它从未显示出"测试!" 警报.

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

Jon*_*ski 11

看来,只有IE9及更高版本支持绑定keydownwindow:http://www.quirksmode.org/dom/events/keys.html#t00

相反,将它绑定到documentfor IE:

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);
    }
}
Run Code Online (Sandbox Code Playgroud)


Snu*_*gus 4

请改用 document.attachEvent。:]