2011-09-07 9 views
0

제목을 용서하고, 무엇을 넣을 지 확신하지 못했습니다.요소 함수의 인수로 루프 변수 전달

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

내가 전에 이런 걸 본 기억,하지만 난 그것을 찾는 것에 대해 갈 것 어떻게 단서가 없다 :

나는 몇 가지 코드가 같이 있습니다. 이와 같은 또 다른 질문에 대해 질문을 받으면 저는 놀라지 않을 것이며 링크를 고맙게 생각합니다.

편집 : 문제는 항상 루프가 끝난 후 '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); }; 
}) 

을 트릭이 this 매개 변수로 links를 전달 .call()을 사용하고 있습니다.

기본으로 지원하지 않는 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); 
}