2012-02-29 185 views
5

我試圖在IE 8中運行它,但它不工作,任何想法?它工作在火狐,Chrome,歌劇......爲什麼keydown監聽器在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定義和事件偵聽器添加。但它永遠不會顯示「測試!」警報。

我讀了一些關於useCapture標誌的信息,可以在其他方法中使用。它在事件「停止」之前捕獲窗口上的按鍵。 Internet Explorer似乎不允許/使用它。這是問題嗎?如果是,我該如何解決?

+0

你就能更好地運用,而不是重新發明輪子的jQuery 。它通過名爲IE – Codebeat 2012-02-29 22:06:59

+0

的可怕瀏覽器解決了很多不同的事情。是的,這是一個flex項目中非常小的JavaScript部分,我不想僅爲幾種方法加載JQuery。 – Ixx 2012-02-29 22:12:30

+0

好的,但我認爲這是一個錯誤的觀點,當解決方案已經存在時,您自己會創建一個問題。 – Codebeat 2012-02-29 22:33:35

回答

4

改爲使用document.attachEvent。 :]

+0

hmpf ...是的這個作品 – Ixx 2012-02-29 23:51:22

9

似乎只有IE9及更高版本支持在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); 
    } 
} 
+0

謝謝,這也是正確和更廣泛的,但其他人是正確的,第一:) – Ixx 2012-02-29 23:52:18

相關問題