2012-08-22 5 views
0

가능한 복제를 반복하는 동안에 :
Javascript closure inside loops - simple practical exampleJS 루프 위치 배열을

I 어레이 출력 호버 위치리스트 항목의 배열을 반복하면서 싶다. 그러나 'i'는 항상 루프가 완료 될 때까지 배열의 길이로 설정되므로 배열의 원하는 위치 대신 항상 배열 길이 값을 얻습니다.

각 목록 항목 번호가 포함 된 알림을 받아야합니다. 사전에

HTML

<ul> 
    <li class='listItem'>listitem1</li> 
    <li class='listItem'>listitem2</li> 
    <li class='listItem'>listitem3</li> 
</ul> 

JS

var arr = document.getElementsByClassName('listItem'); 
for (var i = 0; i < arr.length; i++) { 
    arr[i].onmouseover = function() { 
     alert(i); 
    } 
} 

http://jsfiddle.net/EHcDp/4/

감사합니다!

답변

3
var arr = document.getElementsByClassName('listItem'); 
for (var i = 0; i < arr.length; i++) { 
    (function(i) { 
     arr[i].onmouseover = function() { 
      alert(i); 
     } 
    }(i)); 
} 

이유가/작동 방식을 알아 내기 위해 this duplicate을 읽으십시오.

var arr = document.getElementsByClassName('listItem'); 
for (var i = 0; i < arr.length; i++) { 
    arr[i].onmouseover = (function(x) { 
     return function() { 
      alert(x); 
     }; 
    }(i)); 
} 
: