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

4

4 回答 4

4

您正在调用 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);

或者,如果您有bind可用的 ES5(本机或通过 ES5 shim):

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

它们本质上与我们上面的匿名函数做同样的事情。

于 2013-07-16T08:39:54.073 回答
1

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

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

)顺便说一句,您的 setTimeout 代码中有语法错误(额外的)

于 2013-07-16T08:39:52.033 回答
0

分配以弹出登录检查

var pop = $('#logincheck');

以这种方式调用设置超时

setTimeout(function(){ pop.hide()} , 3000);
于 2013-07-16T08:42:08.097 回答
0

代码应该是:

setTimeout(function() {
  pop.hide();
}, 3000);
于 2013-07-16T08:43:17.287 回答