我无法访问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
答案 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);