见这里:http://blog.jquery.com/2011/05/03/jquery-16-released/
这种新格式有什么区别:
$(".elements").fadeOut();
$.when( $(".elements") ).done(function( elements ) {
// all elements faded out
});
和旧的:
$(".elements").fadeOut(function() { /* all elements faded out */});
答案 0 :(得分:5)
正如Chad所说,$ .when允许你传递一堆回调,一旦所有这些回调完成,就会完成。
http://vimeo.com/22687950是关于延期的视频,并且引入了大约15分钟的标记$ .when()。大约20分钟你会看到这段代码:
var $balls = $(".bounceDemo"),
a = $balls.eq(0).drop(500),
b = $balls.eq(1).drop(2000),
c = $balls.eq(2).drop(4000);
$.when(a,b,c)
.done(function(){
//do something
});
答案 1 :(得分:0)
我所知道的唯一区别是$ .when()。done()语法允许多个回调函数。而许多传递回调函数的“旧”方法需要1个函数对象。
在你的例子中,我可以有5个不同的函数调用.done()而不是动画完成时的一个回调。你甚至可以用$ .when()。done()语法(deferred.done())传入一个函数对象数组。
答案 2 :(得分:0)
新格式使用deferred objects。它们最初被引入作为传统AJAX回调的更灵活的替代方案,因为它们为回调链接和解析提供了更高级别的控制。
已经证明延迟对象足够有用,许多人想用它们将动画链接到他们的AJAX应用程序逻辑中。到目前为止,animate()
来自{{1}}来电promise的回复是possible but awkward。 jQuery 1.6现在支持开箱即用。