2012-06-07 93 views
1

這就是我想要做的事:如何通過Id在同一個循環中定位循環元素?

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)。 我如何針對所有六個人單獨?

+0

我更關心的是函數的定義;好像它需要在循環中捕捉「我」的值。你確定它實際上並沒有遍歷整個數組?看起來不太可能 - 你調試或寫你到控制檯? –

+0

我的觀點是,按照寫法,函數定義中不會捕獲'i'的值 - 當執行任何一個mouseover函數時,'i'的值應該是6--實際上有點驚訝它不是,但沒有多少考慮。 –

+0

TYPO:「For」應該是「Four」 是的,它循環遍歷整個數組,並以「listResult_Six」結尾,當我將鼠標懸停在它上面時,返回alert(「listResult_Six」),但不是其他。 有沒有一種方法可以單獨定位它們? 我需要通過該函數傳遞某種參數嗎? 也許一個計時器來延遲捕獲每一個通行證? 我只是不知道如何捕捉每個循環傳遞...? –

回答

0

每當你給innerHTML分配什麼東西時銷燬已經存在的元素。由於您使用的是+=,因此您可以創建新元素...但您附加到它們的事件處理程序已丟失。改爲使用標準DOM方法創建和附加元素。

此外,i是一個變量。這將是循環完成時分配的最後一個值。

取而代之從上下文獲取數據。

您的for循環語法也不正確。

addDomListener似乎是Google地圖功能。對於HTML使用addEventListener

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); 
    }); 
}​ 
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); 
}