2012-02-29 7 views
5

Bunu IE 8'de çalıştırmaya çalışıyorum ama işe yaramıyor, bir fikrin var mı? BuNeden keydown dinleyicisi IE'de çalışmıyor

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 ... Firefox, Chrome, Opera çalışır:

http://jsfiddle.net/ubfBq/

window.attachEvent tanımlanır ve olay dinleyicisi ekledi. Ama asla "testi" göstermez! Alarm.

Diğer yöntemlerde kullanmak mümkün useCapture bayrağı hakkında bir şey okudum. Olay "kapanır" önce pencerede tuşa basar. Internet Explorer buna izin vermiyor/kullanmıyor gibi görünüyor. Sorun bu mu? Eğer evetse, bunu nasıl çözebilirim?

+0

iyi olur yerine tekerleği yeniden keşfetmek jQuery kullanabilirsiniz . IE – Codebeat

+0

denilen korkunç bir tarayıcıyla birçok farklı şeyi çözüyor Evet, bu, esnek bir projenin içinde çok küçük bir javascript bölümü olduğunu ve JQuery'yi sadece birkaç yöntemle yüklemek istemiyorum. – Ixx

+0

Tamam, ama bence bu yanlış bir argüman ve bir çözüm zaten oradayken kendiniz bir problem yaratıyorsunuz. – Codebeat

cevap

4

Bunun yerine document.attachEvent öğesini kullanın. :]

+0

hmpf ... evet bu çalışır – Ixx

9

Sadece IE9 ve sonraki destek window üzerinde keydown bağlayıcı anlaşılmaktadır: http://www.quirksmode.org/dom/events/keys.html#t00

Bunun yerine, birleştirmiş IE için document için:

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

Teşekkürler, bu da doğru ve daha kapsamlı ama diğer kişi doğru ve ilk oldu :) – Ixx