2012-05-22 112 views
1

我試圖從jQuery頁面中刪除一個對象。我也想要去除動畫。目標是使元素fadeOut(),等待一秒,然後刪除()。但它似乎拒絕等待刪除元素,即使我在setTimeout()函數中使用它。我如何使一個元素fadeOut(),然後刪除()它?在jQuery中刪除元素的問題

$("button").click(function() { 
    $(this).fadeOut(); 
    setTimeout(function() { $(this).remove();}, 1000); 
}); 

回答

7

在你超時功能,this是不是你想的是 - 它實際上是全球window對象。

在任何情況下(沒有雙關語意),你應該使用「完成回調」:

$("button").click(function() { 
    $(this).fadeOut('slow', function() { 
     $(this).remove(); 
    }); 
}); 

,永不混合setTimeout和動畫隊列。沒關係,交錯這兩個,即有一個完成回調啓動一個計時器,或有一個計時器開始動畫,但它永遠不會假設你可以啓動一個1000ms的動畫和一個1000ms的計時器,並讓他們完成在同時。

編輯固定碼 - 在完成回調不需要self,我還在想着setTimeoutthis時,我寫的!

+0

是什麼'this'呢? – jcrowley

+1

在'setTimeout'處理程序中,它是全局'window'對象AFAIK。 – Alnitak

+1

對不起,AFAIK是什麼,我把它解釋爲「假的」。 – jcrowley

8

仔細閱讀手冊: http://api.jquery.com/fadeOut/

的淡出()方法具有淡出完成後時調用的回調函數。要使用它:

$("button").click(function() { 
    $(this).fadeOut(function() { $(this).remove();}); 
}); 

應該沒有理由等待一秒鐘淡出完成後,刪除元素之前,因爲當它被移除的元素將是不可見的。

0

爲什麼不只是使用淡出的回調?

$("button").click(function() { 
    $(this).fadeOut(function(){$(this).remove();}); 
}); 
1
$('button').click(function(){ 
    $(this).fadeOut(function(){$(this).remove()}); 
});​ 

DEMO

0

試試這個,也許它可以幫助:

$("button").click(function() { 
    (function(that) { 
     that.fadeOut(); 
     setTimeout(function() { 
      that.remove(); 
     }, 1000); 
    })($(this)); 
}); 
+0

代碼中的「那」是什麼? – jcrowley

+0

that = $(this);它用於存儲變量$(this),並且您可以稍後在setTimeout中使用'that' – Ikrom