如何让jQuery等待效果完成?

我确信前几天我读到了这个消息,但是我似乎无法在任何地方find它。
我有一个fadeOut()事件之后,我删除元素,但jQuery删除元素之前,有机会完成淡出。
我如何让jQuery等到元素淡出, 然后删除它?

你可以指定一个callback函数:

 $(selector).fadeOut('slow', function() { // will be called when the element finishes fading out // if selector matches multiple elements it will be called once for each }); 

文档在这里 。

使用jQuery 1.6版本,你可以使用.promise()方法。

 $(selector).fadeOut('slow'); $(selector).promise().done(function(){ // will be called when all the animations on the queue finish }); 

你也可以使用$.when()来等待promise完成:

 var myEvent = function() { $( selector ).fadeOut( 'fast' ); }; $.when( myEvent() ).done( function() { console.log( 'Task finished.' ); } ); 

如果你正在做一个可能会失败的请求,那么你甚至可以更进一步:

 $.when( myEvent() ) .done( function( d ) { console.log( d, 'Task done.' ); } ) .fail( function( err ) { console.log( err, 'Task failed.' ); } ) // Runs always .then( function( data, textStatus, jqXHR ) { console.log( jqXHR.status, textStatus, 'Status 200/"OK"?' ); } ); 

如果你想切换某个东西,在同一个地方淡出另一个东西,你可以在div上放置一个{position:absolute}属性,这样两个animation都是相互重叠的,而且你没有在开始下一个animation之前等待一个animation结束。