2011-02-03 69 views
3

我剛剛遇到了使用jQuery的.delay()方法(v 1.4.2)嘗試延遲下面的.load()方法的問題。jQuery - 使用.delay()推遲.load()?

像這樣:

$('myElement').delay(500).load('myPage.php'); 

這似乎只是忽略.delay()。

我evenutally想出了一個變通,像這樣:

setTimeout(function(){ 
    $('myElement').load('myPage.php'); 
}, 500); 

但是,這並不優雅。其他人遇到這個問題並找到更好的解決方案?

謝謝。

+1

`.delay()`只延遲它後面的效果功能排隊 – mVChr 2011-02-03 01:09:31

回答

13

是的,delay()(docs)方法將被忽略,因爲load()(docs)方法不會自動排隊。

setTimeout可能是你最好的選擇,儘管你可以在技術上與.delay()完成它,如果你使用queue()(docs)方法中添加load()呼叫隊列。

$('myElement').delay(500).queue(function(nxt) { 
    $(this).load('myPage.php'); 
    nxt(); 
}); 

該函數被添加到隊列中。然後您需要調用函數的參數來釋放隊列。有一種稱爲dequeue()(docs)的方法可以實現這一點。

+2

1有趣的替代`的setTimeout()`,給定的元件上提供動畫不被完成。 – Orbling 2011-02-03 01:13:36

+1

@Orbling:是的,好點。可以創建一個單獨的隊列,以便默認隊列中的任何內容都不受影響。這個方法需要比簡單的`setTimeout()`更多的開銷,並且沒有提供任何我可以看到的真正好處,所以我會使用`setTimeout`來代替。 – user113716 2011-02-03 01:15:52

+0

感謝Patrick的精彩演繹,我現在明白了這一點。 – AJB 2011-02-03 01:20:38

3

如果使用了jQuery定時器插件,你可以做

$('myElement').oneTime(500, function() { 
    $(this).load('myPage.php'); 
}); 
2

這裏是我的解決方案淡出一個div,然後加載新的內容進去,然後逐漸把它回。這是真正有用的AJAX例如調用加載搜索結果。

$('.search').keyup(function(){ 
    var query= $(this).val(); 
    $('.results').fadeOut('300'); 
    setTimeout(function(){ 
     $('.results').load('search.php?search=' + query, function() { 
      $('.results').fadeIn('300'); 
     }) 
    }, 300); 
    return false; 
});