2011-09-07 114 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); 
} 
相关问题