2011-09-07 115 views
0

原諒標題,不知道要放什麼。在元素函數中傳遞循環變量作爲參數

我有一些這樣的代碼:

var links=document.getElementsByTagName('a'); 
for(var i=0;i<links.length;i++){ 
    var cur=links[i]; 
    cur.onmouseover=function(){alert(i);}; 
} 

我記得以前見過這樣的事情,但我不知道我怎麼會去尋找它。如果有人問這樣的另一個問題,我會很驚訝,並會很感激這個鏈接。

編輯:問題是,它總是警告什麼'我'是循環完成後。如果有兩個鏈接,它們都會提醒2.

編輯:我記得在這裏看到它:http://nathansjslessons.appspot.com/。好幾節課,我建議任何還沒有做過的人。

+1

這是非常好的代碼...你想要它做什麼? – zellio

+1

什麼問題?您發佈的代碼將正常工作。 –

+0

嗯,這不是實際的代碼,只是基本知識,以便人們可以理解我想要的。它應該讓每個'a'元素在鼠標懸停時都提醒它在所有'a'元素的數組中。 – mowwwalker

回答

2

試試這個:

var links=document.getElementsByTagName('a'); 
for(var i=0;i<links.length;i++){  
    var cur=links[i];  
    cur.onmouseover=function(a){ 
     return function(){ 
      alert(a); 
     } 
    }(i); 
} 
+0

剛剛在同一時間得到它。非常感謝!!!我記得我也看到了,我會更新OP。 – mowwwalker

+0

http://jsfiddle.net/aVt7U/1/ – recursive

+0

工程,但你應該教OP如何釣魚。自我調用匿名函數以避免共享關閉不明顯,如果你不明白他們 –

0

您可以實際使用Array.forEach

var links=document.getElementsByTagName('a'); 
[].forEach.call(links, function(cur, i) { 
    cur.onmouseover = function() { alert(i); }; 
}) 

訣竅是使用.call(),傳遞links作爲this參數。

您將需要add .forEach() for older browsers本機不支持它。

0

這是一個更可重用的解決方案。記住3 r的減少再利用回收;)它溢出到現實生活中。看哪個是最快最優化的樂趣! http://jsperf.com/speed-test-for-links-script

var links  = document.getElementsByTagName('a'); 
var linksLength = document.getElementsByTagName('a').length //cache the length means quicker for loop 

var addMouseOver = function(i){ 
    links[i].onmouseover=function(){ 
     alert(i); 
    }; 
} //extract the function 

for(var i=0;i<linksLength;i++){  
    addMouseOver(i); 
}