2011-08-24 2 views
11

jQuery 효과 함수에 전달 된 콜백 함수가 실행되는 동안 오류가 발생하면 반복적으로 실행되는 경우가 하나 이상있는 것으로 보입니다. 예를 들어 jQuery 콜백은 분명 실패시 반복됩니까?

다음 코드를 갖춘 this JS Fiddle를 참조하십시오

$('#awesome').fadeOut(400,function() { 
    log('fading out...'); 
    dieInAFire(); 
}); 

log이 사업부에 전달있어 어떤 추가 ...하지만 dieInAFire가 존재하지 않습니다. 그러나 단순히 실행을 멈추기보다는 익명의 함수가 반복적으로 호출되는 것처럼 보입니다. 로그 div에 '페이드 아웃'이라는 모양이 점점 더 많아짐에 따라 알 수 있습니다.

이것은 예상되는 동작입니까? 그렇다면 왜?

+0

놀라운 발견로 교체 할 수 있습니다 사용하는 경우는 ... :-) 나에게 그것은 전혀 예상 아니에요. – HBublitz

+1

jQuery 버그처럼 보입니다. – Emil

+0

매우 이상하게 보입니다. 애니메이션과 관련이있는 것처럼 보입니다. AJAX 콜백에는이 문제가 없으며 애니메이션이 없으면이 콜백도 좋습니다. IE가 이미'display : none; '스타일을 가지고 있다면 콜백은 정확히 한 번 호출된다. 동일한 문제가 fadeIn()도 발생합니다 – Paulpro

답변

1

patrick dw가 게시 한 버그에 대한 의견을 제출했습니다.

라인을 변경 :

options.complete.call(elem); 

에 :

setTimeout(function(){ 
    options.complete.call(elem); 
}, 0); 

콜백이 비동기 적으로 실행하고 오류가 발생하는 경우 더 이상 실행을 중지하지 않을 경우되도록합니다. IMO는 예외를 억제하지 않기 때문에 try catch을 사용하는 것보다 낫습니다.

당신이 당신의 축소 된 버전을 편집하려면, 당신은 최신 jQuery를, 당신은 e.complete.call(d)를 검색하고 setTimeout(function(){e.complete.call(d)},0)

관련 문제