2013-05-07 7 views
0

하나의 함수에서 Jquery 핸들 함수로 변수를 전달하는 데 간단한 문제가 있습니다. 첫 번째 함수에서 for 루프가 항목 목록을 살펴 보았습니다. 이 함수는 그림을 삽입하고 onclick() Jquery 핸들을 이미지에 추가하려고합니다. onclick()은 for 루프의 indx를 전달하는 함수를 호출합니다. 값을 전달하는 대신 참조가 전달되어 모든 onclick 핸들이 동일한 값 (for 루프의 마지막 값)으로 끝납니다.변수를 javascript의 함수에 전달합니다.

function setAlbums() 

    { 
     for(var indx=0;indx<$("li.mainSpPic").length;indx++) 
      { 
      .... 
      $("li.mainSpPic").eq(indx).children("img").eq(0).click(**function(){chngAlbm(indx,albmStrB[1]**);}) ; 

    } 

그래서 누군가가 각각의 onclick() 함수는 고유 한 값을 가질 것이라는 INDX 변수를 전달하는 방법을 조언 해 줄 수 있습니다 다음과 같이 코드는?

+0

@Barmar이 경우 색인을 계산할 수 있기 때문에 실제로 그 필요는 없습니다. –

+0

클로저가 어떻게 작동하는지 알아 보려면이 부분을 읽으십시오. http://stackoverflow.com/questions/13458889/need-help-understanding-js-code – deven98602

+0

@ 잭 그러나 더 일반적인 경우를 알고있는 것이 좋습니다. – Barmar

답변

0

이것은 자바 스크립트의 종결 때문입니다. 핸들러 함수가 함수 indx 변수에 바인드되어 있기 때문에 실패합니다. indx 변수의 값은 함수가 작성된 시간이 아닙니다. for 문이 완료되면 처리기 함수가 실행됩니다.

이 문제에 대한 해결책은 다음과 같습니다.

function setAlbums() 
{ 
    for(var indx=0;indx<$("li.mainSpPic").length;indx++) 
    { 
     .... 
     $("li.mainSpPic").eq(indx).children("img").eq(0).click(function(value) { 
       return function() { 
        chngAlbm(value,albmStrB[1]); 
       } 
     })(indx) ; 
    } 
} 
관련 문제