2013-04-12 21 views
7

içinde çalışmıyor Lynda.com'da yeni DOM etkinlik modeli hakkında bir eğitici takip ediyorum.addEventListener Chrome

Bu, birlikte çalıştığım kod.

function addEventHandler(oNode, sEvt, fFunc, bCapture){ 

if (typeof (window.event) != "undefined") 
    oNode.attachEvent("on" + sEvt, fFunc); 
else 
    oNode.addEventListener(sEvt, fFunc, bCapture); 
} 

function onLinkClicked(e){ 
alert('You clicked the link'); 
} 

function setUpClickHandler(){ 
addEventHandler(document.getElementById("clickLink"), "click", onLinkClicked, false); 
} 


addEventHandler(window, "load", setUpClickHandler, false); 

Bu bağlantıyı

<a href="#" title="click me" id="clickLink">Click Me!</a> 

O IE, Firefox, Opra tamamen normal çalışır ancak Chrome'da click olayı ekleyerek ediyorum. Etrafa baktım ama henüz belirli bir şey bulamadım. Bazı benzer sorular ama soruma cevap vermiyor.

Chrome konsoluna

Uncaught TypeError: Object [object HTMLAnchorElement] has no method 'attachEvent' 

herhangi önerilerinizi veya cevaba bir bağlantı aşağıdaki hatayı alıyorum.

şimdiden teşekkürler.

+1

kullanmak istediğiniz dışındaki bir nesnenin varlığı için test tehlikesini gösterir. '(eğer oNode.attachEvent! =" undefined ") türküsü daha iyi olurdu. Daha da iyisi, standartlara dayalı olan 'addEventListener 'fonksiyonunu ilk önce test ederek tercih etmektir. –

cevap

7

Neden test ediyoruz:

if (typeof (window.event) != "undefined") 

... attachEvent() kullanıp kullanmayacağına karar için? Chrome, window.event tanımını yapar, bu nedenle kodunuz tanımlı olmayan attachEvent() kullanmayı dener.

yerine doğrudan yöntemi için test deneyin:

açıkça kötü öğretici olduğunu ve
if (oNode.attachEvent) 
    oNode.attachEvent("on" + sEvt, fFunc); 
else 
    oNode.addEventListener(sEvt, fFunc, bCapture); 
+0

teşekkürler, yeni DOM olay modeline bakmaya başladım, ve bu kurstaki hoca ne için test ediyor, ama 2009'dan geliyor. Ama cevabınız mükemmel, benim için de pek anlamlı gelmedi. Bu test neden Chrome'da çalışmıyor, diğer tüm tarayıcılarda çalışıyor? Ama cevabınız işe yarıyor, teşekkür ederim, neden sadece atlamam ve neden başka bir ifadeye geçmediğini merak ediyorum. –

+2

Gösterdiğiniz kod, 2009'da da anlamlı değildi. Cevabımda söylediğim gibi Chrome, "window.event" i tanımladığından Chrome'da "if" koşulu doğru olacaktır. Bu, Chrome'da tanımlanmayan ".attachEvent()" işlevini kullanma denemesiyle sonuçlanır. bahsettiğiniz hatanın). Özgün kod IE'de çalışır; çünkü hem window.event hem de .attachEvent() işlevlerini tanımlar ve FF'de çalışır. Çünkü window.event öğesini tanımlamaz. – nnnnnn

+0

Teşekkürler, harika bir açıklama. İlk yorumda onu kaçırdım. –

İlgili konular