代码之家  ›  专栏  ›  技术社区  ›  Dmitris

事件侦听器的问题

  •  0
  • Dmitris  · 技术社区  · 17 年前

    在我尝试学习核心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>
    
    2 回复  |  直到 17 年前
        1
  •  3
  •   meder omuraliev    17 年前

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

    真正的问题是属性值“application/javascript”对IE不友好,请将其更改为“text/javascript”,并与函数引用一起使用,这样应该很好。

    顺便说一句,我将使用一个抽象的addEvent函数——我的函数特别修复了JScript中的“this”关键字问题,而且由于初始赋值,它不需要检查元素是否支持addEventListener方法,因为它首先检查window对象:

     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 );
    
        2
  •  0
  •   Georg Schölly Crazy Developer    17 年前

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

    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.");
    }
    
    推荐文章