2010-11-24 64 views
6

我有一个div这样的JavaScript的setTimeout或jquery的延迟 - 既不是为我工作

<div id="sale"> 
    ........ 
</div> 

,我试图同时使用

$('#sale').delay(3000).slideDown(500); 

setTimeout(sale(), 3000); 

function sale() { 
    $('#sale').slideDown(500); 
} 

但也他们正在工作。 jQuery延迟表示$('#sale').delay()不是函数,而setTimeout表示无用setTimeout调用(缺少引号)。如果我在sale()呼叫周围添加双引号,则表示“销售未定义”。

为什么这两种方法都不起作用?

我想要做的是让页面加载后3秒出现div。

+0

`setTimeout(sale,3000);`,不`setTimeout(sale(),3000);` – Reigel 2010-11-24 01:37:51

+2

`.delay()`方法被添加到`jQuery 1.4`中。你使用什么版本? – user113716 2010-11-24 01:46:38

回答

15

setTimeout的情况下,你只是做错了。

setTimeout(sale(), 3000); // will call sale and use the RETURN value in the callback but sale returns undefined 

你需要一个函数来传递:

function sale() { 
    $('#sale').slideDown(500); 
} 

setTimeout(sale, 3000); // just pass in the reference to sale() 

其他可能性:

// 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) 

最后但并非最不重要的:

setTimeout(function() { $('#sale').slideDown(500); }, 3000); 
6

您需要排队等候delay()才能工作。

$('#sale').queue(function() { 

    $(this).delay(3000).slideDown(500).dequeue(); 

}); 

See it.

Patrick Dw你并不需要成为一个queue()如果你的下一个方法链动画中的意见已通知。看到他的JSFiddle

+0

delay()不能是动画链的* first *元素吗? – AndreKR 2010-11-24 01:36:25

+0

@AndreKR - 是的,它可以。这个答案是错误的。 http://jsfiddle.net/patrick_dw/Uts7t/ – user113716 2010-11-24 01:42:29

+0

@patrick dw我可以*发誓*我最近读了你需要在'queue()`中使用`delay()`来工作...噢。这是最近的jQuery开发吗? – alex 2010-11-24 01:43:43

0
setTimeout(sale, 3000); 

之前,你路过setTimeoutsale的返回值。这通过了实际的功能。

0

在你的第一个解决方案中,似乎jQuery甚至没有加载。

在您需要做的setTimeout(sale, 3000);(省略括号),因为与他们你与回报sale(),这是undefined调用setTimeout的第二个代码。