1

これは私がやろうとしていることです:

var numArray = ["One","Two","Three","For","Five","Six"];

for (i = 0, i < numArray.length; i++) {
   document.getElementById('results').innerHTML += <div id='listResult_"+[i]+"'></div><br>;

   var target = document.getElementById('listResult_'+[i]);
   document.addDomListener(target, 'mouseover', function() {
      alert("listResult_"+[i]);
   });
}

最後のターゲット ID (listResult_5) に対してのみアラートを出します。6つすべてを個別にターゲットにするにはどうすればよいですか?

4

2 に答える 2

1

試す:

for (i = 0, i < numArray.length; i++) {
   document.getElementById('results').innerHTML += "<div id='listResult_"+[i]+"'></div><br>";

   var target = document.getElementById('listResult_'+[i]);    

    (function(e) {
       document.addDomListener(target, 'mouseover', function() {
         alert("listResult_"+[e]);
       });
    })(i);
}
于 2012-06-08T12:14:11.063 に答える
0

何かを割り当てるたびに、すでにそこにある要素を破壊innerHTMLします。使用しているため、新しい要素を作成します...しかし、それらに添付したイベントハンドラーは失われました. 代わりに、標準の DOM メソッドを使用して要素を作成および追加します。+=

さらに、i変数です。ループが終了したときに最後に割り当てられた値になります。

代わりにコンテキストからデータを取得してください。

forループ構文も正しくありません。

addDomListenerGoogle マップの機能のようです。addEventListenerHTML に使用します。

var numArray = ["One","Two","Three","For","Five","Six"];

for (var i = 0; i < numArray.length; i++) {
   var myDiv = document.createElement('div');
   myDiv.id = "listResult_"+[i];
   myDiv.appendChild(document.createTextNode(myDiv.id));
   document.getElementById('results').appendChild(myDiv);
   // Don't append a line break between block containers. Use CSS isntead.
   myDiv.addEventListener('mouseover', function() {
      alert(this.id);
   });
}​
于 2012-06-08T12:13:28.677 に答える