2013-07-16 46 views
0

我無法訪問settimeout函數 中的變量,即在以下示例中setTimeout(pop.hide()),3000);這裏pop.hide()內的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(或者說,你會是這樣,但你有一個額外的)有那麼它實際上是一個語法錯誤  —你應該看到的是語法錯誤在你的JavaScript控制檯。)

您正在尋找:

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

Crowser +1尼斯的答案,在所有可能的角度解釋:) – Praveen

1

你c烏爾德使用以下(匿名函數)

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

BTW,有一個在您的setTimeout代碼

0

指定彈出登錄檢查

var pop = $('#logincheck');

呼叫設置超時這樣

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

是絕對沒有理由讓'流行'全局(或者至少把它移到漂亮的容器['logClick']之外)。還有一堆原因不會。 –

+0

@ T.J。Crowder我的錯誤,你是絕對正確的。讓我更改代碼。 Upvote給我你的評論! –

0

的代碼應該是:

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