4

javascript を使用して eventListener を追加するのに問題があります。わかりました、4 つのアンカー要素を作成する関数があります。背景色を変更する関数を呼び出す onmouseover にイベントを追加したいと考えています。コードは次のとおりです (createAnchor() の最後の行から次の行を見て、関連するコード行を見つけてください。

function createAanchor(index) { 
            var a = document.createElement("a");
            var text = getText(index);
            var a = document.createElement("a");
            var t = document.createTextNode(text);
            a.href = getHref(index);
            a.appendChild(t);
            a.style.textAlign = "center";
            a.style.fontSize = "1.2em";
            a.style.color = "white";
            a.style.fontFamily = "arial";
            a.style.fontWeight = "bold";
            a.style.textDecoration = "none";
            a.style.lineHeight = "238px";
            a.style.width = "238px";
            a.style.margin = "5px";
            a.style.background = eightColors(index);
            a.style.position = "absolute";
            a.addEventListener("onmouseover", changeColor());
            return a;
    }

    function changeColor() {
        alert("EVENT WORKING");
    }

ここに問題があります。関数が実行されa.addEventListener("onmouseover", changeColor());function changeColors()が、後で実行されない場合、これはonmouseoverなぜですか?

4

4 に答える 4

6
  1. そのようなイベントはありません。onmouseoverイベントは呼び出されmouseoverます。
  2. への関数参照を渡す必要がありますaddEventlistener()すでにお気づきのように、関数を呼び出すので...呼び出さないでください。

これは、次のようになります。

a.addEventListener("mouseover", changeColor);

quirksmode.orgのイベント処理に関する優れた記事を読むことをお勧めします。

于 2013-03-22T22:44:04.440 に答える
4

changeColors()ただの代わりに書いたからですchangeColors()関数を呼び出すように JavaScript に指示します。

つまり、changeColorsそれ自体が関数への参照であり、 whilechangeColors()は関数を参照してからそれを呼び出します。関数呼び出しの結果 (関数からの戻り値) は、最終的に に渡されaddEventListener()ます。

于 2013-03-22T22:43:40.237 に答える
0

イベントタイプで接頭辞「on」をいつ使用するかを理解する必要があると思います。IE 8 以下では、addEventListener および removeEventListener と同等の attachEvent および detachEvent を使用します。この質問には必要のない違いがいくつかあります。

attachEvent を使用している間、イベント タイプには「on」というプレフィックスが付けられますが、addEventListener ではプレフィックスは使用されません。

したがって、

    elem.attachEvent("onclick",listener); // <= IE8

    elem.addEventListener("click",listener,[,useCapture]); // other browsers
于 2014-03-05T07:33:18.403 に答える
-1

私もそのようなことをする必要がありました。マップに infoWindow があり、その infoWindow の段落でクリック イベントを処理する必要があります。だから私はこのようにしました:

google.maps.event.addListener(infoWindow, 'domready', function() 
     {
        paragraph = document.getElementById("idOfThatParagraph");
        paragraph.addEventListener("click", function()
        {
          //actions that I need to do
        });
    });

わたしにはできる。だから私はそれが誰かを助けることを願っています:)

于 2013-12-01T17:05:09.140 に答える