2010-11-24 63 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的第二個代碼。