2010-11-24 20 views
6

Ben div böylejavascript - Benim için çalışıyoruz ne

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

var ve her ikisi

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

ve

setTimeout(sale(), 3000); 

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

kullanmaya çalıştı ama hiçbiri Onlar çalışıyor. JQuery gecikmesi, setTimeout yolunun faydasız setTimeout çağrısının (eksik tırnak işareti) olduğunu belirtirken $('#sale').delay()'un bir işlev olmadığını belirtir. sale() aramasının etrafında çift tırnak eklerseniz, sadece "Satış tanımlanmamış" yazıyor.

Neden bunlardan hiçbiri çalışmıyor?

Tüm yapmaya çalıştığım, sayfanın yüklenmesinden 3 saniye sonra bir div görünmesidir.

+0

'setTimeout (sale, 3000);' setTimeout (sale(), 3000); ' – Reigel

+2

' .delay() 'yöntemi' jQuery 1.4''e eklendi. Hangi sürümü kullanıyorsunuz? – user113716

cevap

15

setTimeout durumunda sadece yanlış yapıyorsunuz.

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

Bir işlevinde geçmesi gerekiyor:

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

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

Diğer olasılık:

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

Ve son ama en az:

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

Ekstra işlevin bir anlamı yok. –

+0

@Matthew Ben setTimeout kullandığımda her zaman bir ihtiyacım ile bittiğinden, sabit, sadece alışkanlık;) –

+0

alternatif olarak sadece animasyonu anonim işlev içine koyabilirsiniz –

6

Çalıştırmak için delay() için bir kuyrukta olmanız gerekir.

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

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

}); 

See it.

Patrick Dw

sonraki yöntem zinciri bir animasyon ise bir queue() olması gerekmez yorumlarda bildirdi. Onun JSFiddle.

+0

delay() bir animasyon zincirinin * ilk * öğesi olamaz? – AndreKR

+0

@AndreKR - Evet yapabilir. Bu cevap yanlış. http://jsfiddle.net/patrick_dw/Uts7t/ – user113716

+0

@patrick dw Yapabilirim * yeminli * Son zamanlarda okuduğum bir 'queue()' için 'gecikme()' çalışmak zorundasınız. Bu yeni bir jQuery geliştirme mi? – alex

0
setTimeout(sale, 3000); 

önce, setTimeoutsale dönüş değeri geçen. Bu gerçek işlevi geçer.

0

İlk çözümünüzde jQuery'nin yüklü olmadığı anlaşılıyor. Eğer undefined olduğunu dönüş sale() ait ile setTimeout aradığınız onlarla çünkü setTimeout(sale, 3000); yapmak (parantez atın) zorunda ikinci kodunda

.

+0

Hayır, 'undefined' –

+0

Argh, emin değildim ... 50/50 şansını kaybettim. ;) – AndreKR

+0

jquery yüklendi. Bu parçayı henüz göndermedim – Catfish

0
setTimeout("sale();", 3000); 
+1

Hatalı bir fikir - bu içten bir “değerlendirir() işlevini yazın. Sadece 'sale' argümanı olarak geçsin. – alex

+0

Bunun olası bir başka sorunu, '.ready()' işleyicisi içindeki işlevleri tanımlamakta nadir olmamasıdır. Eğer durum buysa, 'satış', global bağlamdaki dizgiyi değerlendirmeyi deneyen 'setTimeout' öğesine erişilemezdi. – user113716

İlgili konular