0

要素を div に生成する for ループがあり、各要素が同じ関数を呼び出すが、一意の ID が必要です。

for(var i = 0; i < 10; i++)
{
    var p = document.createElement("p");

    var t = document.createTextNode("asdf");
    p.appendChild(t);

    p.addEventListener("click", function(e){popup(e, i);}, false);

    document.getElementById("someDiv").appendChild(p);
}

たとえば、関数は次のとおりです。

function popup(e, id)
{
    //do stuff with the mouse event and get data according to the id
}

そのため、マウス イベント オブジェクトが必要です。

この現在のコードは要素を作成しますが、クリックするたびにパラメーターと同じ ID を持つ関数が呼び出されます (ID として 10 が送信され、マウス イベントは正常に動作します)。

どんなアイデアでも大歓迎です!前もって感謝します。

4

1 に答える 1

2

これは、for ループからの最後の値を保持するクロージャが作成されるiために発生します。次の行を変更する必要があります。

p.addEventListener("click", function(e){popup(e, i);}, false);

これを修正するには、まず新しい関数を宣言します。

function createfunc(i) {
    return function(e) {popup(e, i); }
}

次に、その行を次のように変更します。

p.addEventListener("click", createfunc(i), false);

この手法の詳細については、この質問を確認してください。

于 2013-11-01T21:43:38.363 に答える