2009-07-26 76 views
0

在我學習核心JavaScript的嘗試中,我現在正在學習EventListeners。事件監聽器的問題

我的問題是,在EventListener下面的代碼沒有在IE中被觸發(在Firefox和Chrome中工作得很好)。

有人能告訴我我做錯了什麼嗎?

我的代碼是:

<p>The first captain of the USS Enterprise NCC-1701 was 
      <a id="wikipedia" href="http://en.wikipedia.org">Christopher Pike</a>. 
     </p> 

     <script type="application/javascript"> 

       var link = document.getElementById("wikipedia"); 
       // for firefox and other browsers 
       if (typeof link.addEventListener != "undefined") 
       { 
        link.addEventListener("click", clickListener, false); 
       } 
       // IE only 
       else if (typeof link.attachEvent != "undefined") 
       { 
        link.attachEvent("onclick", clickListener); 
       } 

       function clickListener() 
       { 
        var link = document.getElementById("wikipedia"); 
        link.setAttribute("href", "www.mysite.com/"); 
        open("http://www.mysite.com"); 
        return false; 
       } 
     </script> 

回答

3

是真正的完整代碼?如果是這樣,那麼參考應該是'clickListener'而不是'wikipediaLink.clickListener'。

真正的問題是屬性值「應用程序/ JavaScript」不是IE友好的,將其更改爲「文本/ JavaScript」,並與函數引用一起,你應該是好的。

順便說一句,我會使用一個抽象的addEvent函數 - 我特別修復了JScript中的'this'關鍵字問題,也因爲初始分配它不需要檢查元素是否支持addEventListener方法或不因爲它檢查窗口對象第一:

var addEvent = (function() { 
    function addEventIE(el, ev, fn) { 
     return el.attachEvent('on' + ev, function(e) { 
     return fn.call(el, e); 
     }); 
    } 
    function addEventW3C(el, ev, fn) { 
     return el.addEventListener(ev, fn, false); 
    } 
    return window.addEventListener ? addEventW3C:addEventIE; 
    })(); 

用法:

addEvent(link, 'click', clickListener); 
+0

我根據你的建議修正了它,它仍然沒有在IE – Dmitris 2009-07-26 08:43:16

+0

下工作發現了真正的問題,改變了type屬性。 – 2009-07-26 08:49:26

0

嘗試使用此方法,以確定瀏覽器:

theFunction = function() { alert("Clicked!"); }; 
theElement = document.getElementById('wikipedia'); 

// All modern browsers 
if (window.addEventListener) { 
    theElement.addEventListener('click', theFunction, false); 

// IE 
} else if (window.attachEvent) { 
    theElement.attachEvent('onclick', theFunction); 

// Failure 
} else { 
    alert("Your browser is definitely too old."); 
}