2009-07-26 3 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».

Настоящая проблема - значение атрибута «application/javascript» не поддерживает IE, меняет его на «text/javascript» и наряду с ссылкой на функцию, и вы должны быть хорошими.

Кстати, я бы использовал абстрактную функцию addEvent - моя, в частности, исправляет проблему ключевого слова «this» в JScript, а также из-за первоначального присвоения ему не нужно проверять, поддерживает ли элемент метод 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

Я исправил его в соответствии с тем, что вы suguested, он все еще не работает под IE – Dmitris

+0

Нашел настоящую проблему, изменив атрибут типа. –

+0

Большое спасибо. Все работает сейчас. – Dmitris

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."); 
} 
+0

Спасибо, мне нравится ваше решение. – Dmitris