2012-02-29 187 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

相关问题