2011-02-03 79 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; 
});