2012-02-29 24 views
5

私はIE 8でこれを実行しようとしていますが、うまくいきません。IEでkeydownリスナーが動作しない理由

http://jsfiddle.net/ubfBq/

window.attachEventが定義されており、イベントリスナーが追加されます。それはjsfiddle

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!"); 
} 

... Firefoxの、クロム、Operaで動作します。しかし、それは決して "テスト!"警戒。

他の方法でも使用できるuseCaptureフラグについての記事を読んでいます。それは、イベントが「降りる」前にウィンドウ上のキーの押下をキャプチャします。 Internet Explorerはこれを許可/使用していないようです。それは問題ですか?はいの場合、どうすれば解決できますか?

+0

を。それはIEの – Codebeat

+0

と呼ばれるひどいブラウザでさまざまなことを解決しますはい、これは、これは、非常に小さなJavascriptのセクションは、フレックスプロジェクト内であり、私はいくつかのメソッドだけのJQueryをロードしたくないです。 – Ixx

+0

[OK]を、しかし、私はそれが虚偽の引数だと思うし、解決策が既に存在する場合は、自分で問題を作成します。 – Codebeat

答えて

4

代わりにdocument.attachEventを使用してください。 :]

+0

hmpf ...ええ、これは動作します – Ixx

9

IE9以降のサポートのみがwindowに​​を結合ことが表示されます:http://www.quirksmode.org/dom/events/keys.html#t00

代わりに、IE用のdocumentにバインド:

あなたがより良い代わりに車輪の再発明のjQueryのを使用することができます
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

関連する問題