javascript IE中未触发事件侦听器

kuuvgm7e  于 2023-01-01  发布在  Java
关注(0)|答案(2)|浏览(236)

在学习核心JavaScript的过程中,我现在学习EventListener。
我的问题是,在下面的代码中,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.example.com/");
                    open("http://www.example.com");
                    return false;
                }
        </script>
o8x7eapl

o8x7eapl1#

这真的是完整的代码吗?如果是,那么引用应该是'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 );
unftdfkk

unftdfkk2#

尝试使用以下方法确定浏览器:

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

相关问题