事件监听器的问题

时间:2009-07-26 08:30:48

标签: javascript javascript-events

在我学习核心JavaScript的过程中,我现在正在学习EventListeners。

我的问题是,在下面的代码中没有在IE中触发EventListener(在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>

2 个答案:

答案 0 :(得分: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 );

答案 1 :(得分: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.");
}