在settimeout函数内访问变量

时间:2013-07-16 08:37:58

标签: jquery settimeout

我无法访问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

4 个答案:

答案 0 :(得分: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 :(得分:1)

您可以使用以下(匿名函数)

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

顺便说一句,你的setTimeout代码

中存在语法错误(额外的)

答案 2 :(得分:0)

分配给logincheck中的pop

var pop = $('#logincheck');

以这种方式调用设置超时

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

答案 3 :(得分:0)

代码应为:

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