2015-10-11 124 views
1

我想用mouseover事件將每個<p>的innerText更改爲*在for循環中添加事件

HTML

<p id="object1">O</p> 
<p id="object2">O</p> 
<p id="object3">O</p> 

我寫了一個劇本,但它不僅影響最後<p>。我的腳本有什麼問題?我會很感激的幫助。

的JavaScript

var nodeList = document.getElementsByTagName('p'); 

for (var i = 0; i < nodeList.length; i++) { 
    var obj = Utility.$(nodeList[i].id); 
    obj.addEventListener('mouseover', function() { 
     obj.innerHTML = '*'; 
    }, false); 
} 
+1

的[如何關閉JavaScript的工作?(可能的複製http://stackoverflow.com/questions/111102/how- do-javascript-closures-work) – SeinopSys

+0

最簡單的解決方案是'let obj = ...'。 –

+1

更簡單的是'this.innerHTML ='*';' –

回答

1

您應該使用事件參數的事件處理程序,否則obj是最後assignent(在循環分配)。

而且你不需要任何Utility幫手

var nodeList = document.getElementsByTagName('p'); 

for(var i = 0; i < nodeList.length; i++) 
{ 
    var obj = nodeList[i]; 
    obj.addEventListener('mouseover', function(e){ 
     e.target.innerHTML = '*'; 
    }, false); 
} 

http://jsfiddle.net/002efeht/

+0

謝謝你。它正在工作。我在劇本中犯了錯誤。 –