Почему слушатель keydown не работает в IE - PullRequest
5 голосов
/ 01 марта 2012

Я пытаюсь запустить это в 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, похоже, не позволяет / использует это. Это проблема? Если да, как я могу это решить?

Ответы [ 2 ]

11 голосов
/ 01 марта 2012

Похоже, что только IE9 и более поздние версии поддерживают связывание keydown на window: http://www.quirksmode.org/dom/events/keys.html#t00

Вместо этого свяжите его с document для 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);
    }
}
4 голосов
/ 01 марта 2012

Вместо этого используйте document.attachEvent. :]

...