javascript setTimeout 或 jquery 延迟 - 都不适合我
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/4262727/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
javascript setTimeout or jquery delay - neither are working for me
提问by Catfish
I have a divlike this
我有一个div这样的
<div id="sale">
........
</div>
and I tried to use both
我试图同时使用两者
$('#sale').delay(3000).slideDown(500);
and
和
setTimeout(sale(), 3000);
function sale() {
$('#sale').slideDown(500);
}
but neither of them are working. The jQuery delay says $('#sale').delay()is not a function while the setTimeoutway says useless setTimeoutcall (missing quotes). If I add double quotes around the sale()call, it just says "Sale is not defined".
但他们都没有工作。jQuery 延迟表示$('#sale').delay()不是函数,而setTimeout方式表示无用setTimeout调用(缺少引号)。如果我在sale()电话周围添加双引号,它只会说“未定义销售”。
Why won't either of these work?
为什么这两个都行不通?
All I'm trying to do is make a div appear 3 seconds after the page is loaded.
我想要做的就是在页面加载后 3 秒显示一个 div。
回答by Ivo Wetzel
In case of setTimeoutyou're simply doing it wrong.
如果setTimeout你只是做错了。
setTimeout(sale(), 3000); // will call sale and use the RETURN value in the callback but sale returns undefined
You need to pass in a function:
您需要传入一个函数:
function sale() {
$('#sale').slideDown(500);
}
setTimeout(sale, 3000); // just pass in the reference to sale()
Other possibility:
其他可能:
// no difference in this case
// Note: if it were obj.sale() then you would need to do this version
// otherwise sale() will get called with the this set to window
setTimeout(function(){sale()}, 3000)
And last but not least:
最后但并非最不重要:
setTimeout(function() { $('#sale').slideDown(500); }, 3000);
回答by alex
You need to be in a queue for delay()to work.
您需要排队delay()才能工作。
$('#sale').queue(function() {
$(this).delay(3000).slideDown(500).dequeue();
});
Patrick Dwhas informed in the comments you don't need to be in a queue()if your next method chain is an animation. See his JSFiddle.
queue()如果您的下一个方法链是动画,Patrick Dw已在评论中告知您不需要在 a 中。参见他的JSFiddle。
回答by Matthew Flaschen
setTimeout(sale, 3000);
Before, you were passing setTimeoutthe return value from sale. This passes the actual function.
之前,您是setTimeout从sale. 这通过了实际的功能。
回答by AndreKR
In your first solution it seems that jQuery is not even loaded.
在您的第一个解决方案中,似乎甚至没有加载 jQuery。
In the second code you have to do setTimeout(sale, 3000);(omit the parentheses) because with them you are calling setTimeout with the returnof sale(), which is undefined.
在第二个代码,你需要做的setTimeout(sale, 3000);(省略括号),因为与他们你正在呼吁与setTimeout的回报的sale(),这是undefined。
回答by eric.christensen
setTimeout("sale();", 3000);

