2012-10-18 4 views
0

루프 내부에 애니메이션과 관련된 문제가 있습니다. 출력은 내가 추측해야하지만 Kow 내가 원하지 않는 것입니다.루프 내의 jquery 애니메이션이 동일한 인덱스를 반환합니다.

for (var i = 0; i < slots.length; i++) { 
    $('#slot-'+i).animate({ 
    marginTop: -10 
    }, 200, function() { 
    console.debug(i); 
    if (i == 0) somefunction(); 
    }); 
} 

문제는 console.debug (i)가 for 루프의 마지막 색인을 매번 출력한다는 것입니다.

내가 원하는 것은 : 애니메이션의 완전한 기능에서 나는 함수를 호출하려고합니다. 그러나 한 번만 호출합니다. 여기

답변

3
for (var i = 0; i < slots.length; i++) { 
    $('#slot-' + i).animate({ 
     marginTop: -10 
    }, 200, (function(count) { 
     return function() { 
      console.debug(count); 
      if (count == 0) somefunction(); 
     }; 
    })(i)); 
} 

문제는 당신이 즉시 호출 함수 표현식을 사용하지 않는 반환 각 반복에 대한 적절한 성공 처리기, 당신의 핸들러의 모든 내가 같은 값을 참조 것이라는 점이다.

+0

이 좋은 답변입니다,하지만 유용합니다. 수정 된 코드를 폐기하면 향후 사용자에게 덜 유용합니다. – Jamiec

+0

예,이 답변은 훌륭합니다. 작동합니다. 신경 쓰지 마세요. 설명하기가 어렵지만이 방법을 명심하십시오. – ggzone

+0

@ Jamiec 설명을 포함 시켰지만, 최근 대화에서 범위에 대한 나의 이해가 다소 결점이 있음을 발견했습니다. 깊이있는 설명이 있거나 설명에 이상이있는 것이 있으면 여기에 답변이나 의견을 게시하십시오. –

0

이 시도 :이 모두의 이익을 위해 작동하는 이유를 설명하는 경우

var i = 0; 
for (i=0; i < slots.length; i++) { 
$('#slot-'+i).animate({ 
    marginTop: -10 
    }, 200, function() { 
    console.debug(i); 
    if (i == 0) somefunction(); 
    }); 
} 
+0

당신의 접근 방법에는 어떤 것이 있습니까? – VisioN

+0

그래, 그는 var 먼저 설정 ... 나는 그것을 시도했지만 실패 : (작품 위의 대답 – ggzone

+0

이 경우'var 내가'그때 그것은 작동 할 수있는 세계적인되어야한다고 생각하고 내 대답은 글로벌 var처럼 작동해야합니다. –

관련 문제