これは私を夢中にしています...私はイベントリスナーをSVGオブジェクトに追加するループを持っています。オブジェクトは引数のために小さな円です.10個の円ごとにマウスオーバーイベントとマウスアウトイベントを追加する必要があります。addEventListenerにイベントを渡すことができません:closure issue
最初の問題は、すべてのリスナーが同じループに追加されているため、ループ変数の同じ無効な値がすべて表示されるためです。私はこれを修正することができますが、第2の問題は、リスナーに「イベント」を渡す必要があることです。これらの問題を同時に解決する方法はありません。
私はこれのさまざまなバージョンを試してみた:
for(month = 0; month < nMonths; month++) {
...
shape.addEventListener(
"mouseover",
(function(event, index) { popup_on(event, foo, index); })(event, month),
false);
group.appendChild(shape);
}
この特定のバージョンは、「イベントが定義されていない」私を与えます。 popup_on
は実際のハンドラであり、event
と現在の値month
を取得する必要があります。どのように私はこれを行う必要がありますか?ありがとう。
申し訳ありませんが、もう少しきちんと物事を行うためのパラメータを行うことができますだから、私は実際にこの機能を置くのですか? 'shape'はループで作成されます(おそらく10倍から20倍)。新しい 'shape'インスタンス( 'createElementNS'から)にはハンドラが追加されていなければなりません。したがって、現在の「形」がコンテキストにあるこの無名関数を置くことができる場所はどこにもないようです。これを考えると、私はすべてを 'addEventListener'呼び出し自体に入れる必要はありませんか?どのように私が「e」と「月」の両方をparamsとして得ることができるかという問題を残していると思いますか? – EML
@ user785194私が上に書いたコードはうまくいくと思います。シェイプが再作成されるたびに、その特定のインスタンスにイベントリスナーを追加するために上のコードを上に置くだけです。 –
華麗な - それはそれをしました。ありがとう。 – EML