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

それは本当に完全なコードですか?その場合、リファレンスは「wikipediaLink.clickListener」ではなく「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 );
于 2009-07-26T08:37:14.150 に答える