2012-02-29 30 views
5

Próbuję uruchomić to w IE 8, ale to nie działa, jakiś pomysł? To działa w Firefox, Chrome, Opera ...Dlaczego słuchacz keydown nie działa w IE

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 jest zdefiniowany i dodany detektor zdarzeń. Ale nigdy nie pokazuje "testu!" alarm.

Przeczytałem coś na temat flagi useCapture, której można użyć w innych metodach. Przechwytuje naciśnięcie klawisza w oknie, zanim zdarzenie "zejdzie". Internet Explorer wydaje się nie zezwalać/używać tego. Czy to jest problem? Jeśli tak, jak mogę to rozwiązać?

+0

Można lepiej wykorzystać jQuery zamiast wymyślania koła . Rozwiązuje wiele różnych rzeczy z okropną przeglądarką o nazwie IE – Codebeat

+0

Tak, to jest bardzo mała sekcja javascript wewnątrz projektu flex i nie chcę ładować JQuery tylko na kilka sposobów. – Ixx

+0

OK, ale myślę, że jest to fałszywy argument i sam tworzysz problem, gdy rozwiązanie już istnieje. – Codebeat

Odpowiedz

4

Zamiast tego należy użyć document.attachEvent. :]

+0

hmpf ... tak to działa – Ixx

9

Wydaje się, że tylko IE9 a później wsparcie wiążące keydown na window: http://www.quirksmode.org/dom/events/keys.html#t00

Zamiast wiążą go do document dla 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); 
    } 
} 
+0

Dzięki, jest to również poprawne i bardziej rozbudowane, ale druga osoba była poprawna i pierwsza :) – Ixx