2010-06-13 4 views
0

창 위치를 변경할 때 효과가 풍부한 플래시를 시도하지만 작은 문제가 있습니다. 해결할 수 없습니다. 스크립트에서setTimeout이 window.location에서 작동하지 않습니까?

보기는

$(document).ready(function(){ 

      $('a.flash').click(function(e) { 
       e.preventDefault(); 
       $('body').fadeOut(1500); 
       setTimeout("", 1500); 
       window.location=this.href; 
      }); 
     }); 

window.location=this.href은에서 1500ms 후에 수행해야합니다 바랍니다,하지만 발생하지 않습니다. 이유를 설명해 주시겠습니까? 무엇이 이상한 지, alert("something"); 대신 window.location=this.href을 쓰려고하면 잘 동작합니다. 이유를 설명해 주시겠습니까?

감사

+0

내가 alert()을 작성했을 때 왜 작동합니까 ??? 이 경우 1500ms를 "잠"후 경보를 보낸다. 왜? – Simon

답변

7
$(document).ready(function(){ 

      $('a.flash').click(function(e) { 
       var el = this; 
       e.preventDefault(); 
       $('body').fadeOut(1500); 
       setTimeout(function() { location=el.href }, 1500); 
      }); 
     }); 

당신은 1500 밀리 초 후에 호출에서는 setTimeout의 첫 번째 PARAM로 콜백 기능을 제공하기로되어 있습니다.

3

setTimeout이 아니고은 다른 언어로 Thread.sleep(1500);과 같습니다. setTimeout은 미래의 어떤 시점에서 실행될 코드를 예약하고 을 차단하고을 차단하지 않습니다. 실행 즉시 setTimeout 호출을 전달하고 계속합니다.

첫 번째 매개 변수는 함수에 대한 참조이거나 평가 될 문자열입니다.

setTimeout을 사용하는 적절한 방법에 대한 메 서의 대답을 참조하십시오. 익명 기능을 사용하여 평가하지 않아도됩니다.

+0

quotes = eval = badbad, 대신 lambdas 사용 –

+0

setTimeout ("window.location = this.href;", 1500); 작동하지 않습니다. 하지만 논리를 이해하고 있습니다. 감사합니다. 그러나 내가 alert()를 쓸 때 그것이 왜 잘 작동하는지; ??? – Simon

+2

그 문맥에서'this'는 아마'window'이고'a' 요소는 아닙니다. 내 대답을 해봤 니? –

관련 문제