2013-07-16 2 views
0

settimeout 함수 내 변수 에 액세스 할 수 없습니다. 예 : setTimeout (pop.hide()), 3000); 여기 pop.hide()에서는 setTimeout 내부 나던 작업 ...settimeout 함수 내 변수 액세스

모든 솔루션 ..

HTML

<div id="logincheck"></div> 

JS :

function logClick() { 
        var sEmail = $('#username').val(); 
        var sPassword = $('#password').val(); 

        var pop = $('#logincheck'); 

        if (($.trim(sEmail).length == 0) && ($.trim(sPassword).length == 0)) { 

         pop.show(); 

         pop.html('Enter EmailId and Password '); 
         setTimeout(pop.hide()), 3000); 
        } 

감사 AB

답변

3

에서 구문 오류 (추가 )) 인 당신은 pop.hide()를 호출하고 setTimeout에 반환 값을 전달하는 다음 (익명 함수)를 사용 울드. 정확하게 방법 foo(bar())bar을 호출하고 foo에 반환 값을 전달합니다. (또는 오히려, 당신은 할 것이지만, 실제로 구문 오류   — 당신이 당신의 자바 스크립트 콘솔에서이 구문 오류가 표시되어야한다, 그래서 당신이 여분의 ) 있습니다.)

을 당신이 찾고있는 :

setTimeout(function() { 
    pop.hide(); 
}, 3000); 

여기서 우리는 익명의 함수를 정의하지만 호출하지 않습니다.이 함수에 대한 참조는 setTimeout으로 전달됩니다. 타이머가 만료되면 해당 함수가 호출되고 pop.hide()을 호출합니다.

아니면 jQuery를 사용하고 있기 때문에, 당신은 사용할 수는 $.proxy :

setTimeout($.proxy(pop.hide, pop), 3000); 
// or 
setTimeout($.proxy(pop, "hide"), 3000); 

또는 당신이있는 경우 ES5의 bind (기본적으로 또는 ES5 심 통해) 가능 : 모두

setTimeout(pop.hide.bind(pop), 3000); 

그 기본적으로 위의 익명 함수와 동일한 작업을 수행합니다.

+1

없다

setTimeout(function() { pop.hide(); }, 3000); 
'전역 (또는 적어도 멋진 컨테이너 ['logClick'] 밖으로 이동하십시오). 그리고 여러 가지 이유가 있습니다. – Praveen

1

너 c

setTimeout(function() { 
    pop.hide() 
}, 3000); 

BTW, 거기에서는 setTimeout 코드

0

logincheck에서 팝업으로 할당

var pop = $ ('# logincheck');

전화 설정 시간 제한이 방법

setTimeout(function(){ pop.hide()} , 3000); 
+1

절대적으로'팝업을 할 이유 Crowser +1 멋진 대답은, 가능한 모든 각도에서 설명 –

+0

@ T.J.Crowder 나의 실수, 당신은 절대적으로 옳습니다. 코드를 변경하겠습니다. 나에 의해 당신의 코멘트 Upvote! –

관련 문제