2009-07-26 78 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."); 
}