2011-08-24 15 views
11

Bir jQuery efekti işlevine iletilen bir geriçağırım işlevinin, yürütülürken bir hata olması durumunda tekrar tekrar çalıştırılacağı en az bir durumu gözlemliyorum. Örneğin jQuery geri aramaları, başarısızlıkla ilgili olarak tekrarlanıyor?

, aşağıdaki kodu içeren, this JS Fiddle bkz:

$('#awesome').fadeOut(400,function() { 
    log('fading out...'); 
    dieInAFire(); 
}); 

log bir div için kendisine geçirilen her ne ekler ... ama dieInAFire yok. Daha ziyade, yürütmeyi durdurma, ancak, anonim işlevin, gün geçtikçe artan bir şekilde 'yok olma' ... 'nın günlüğünde ortaya çıkmasıyla ortaya çıktığı anlaşılıyor.

bu beklenen davranış mı? Öyleyse neden?

+0

şaşırtıcı keşifler ile değiştirebilirsiniz kullanıyorsanız ... :-) Bana göre hepsi de beklenen değil. – HBublitz

+1

Bir jQuery hatası gibi görünüyor. – Emil

+0

Çok garip, animasyon ile ilgili bir şey var gibi görünüyor. AJAX geri aramalarında bu sorun yok ve bu geri çekme de animasyon yoksa iyi. IE eğer eleman zaten stiline sahipse 'display: none;' geri arama tam olarak bir kez çağrılır. Aynı sorun fadeIn() ile de oluşur. – Paulpro

cevap

1

Sadece patrick dw'nin yayınladığı hata hakkında bir yorum gönderdim.

hattını değiştirme:

options.complete.call(elem); 

için:

setTimeout(function(){ 
    options.complete.call(elem); 
}, 0); 

geri arama uyumsuz yürütme ve herhangi bir hata atarsa ​​artık yürütme durur eğer neden olur. IMO, istisnayı engellemediği için try catch kullanmaktan daha iyidir.

Eğer küçültülmüş versiyonu düzenlemek istediğiniz ve en son jQuery, sen e.complete.call(d) aramak ve setTimeout(function(){e.complete.call(d)},0)

İlgili konular