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>
4

2 回答 2

3

这真的是完整的代码吗?如果是这样,那么参考应该是“clickListener”而不是“wikipediaLink.clickListener”。

真正的问题是属性值“application/javascript”不是 IE 友好的,将其更改为“text/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 );
于 2009-07-26T08:37:14.150 回答
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.");
}
于 2009-07-26T08:56:03.783 回答