2011-06-02 82 views
2

我有下面的代碼,當有事情發生,通知用戶:jQuery的淡出()同一元素多次

window.parent.$(".Toast").html('Successfully Did Something!').fadeOut(9000); 

它的偉大工程的第一次,但後來,當然,元素仍設置隱藏並具有相同的文本。所以當用戶再次觸發時,沒有任何反應。我試着立即設置html()來清空並顯示它,但是那會立即發生,所以你永遠不會看到文本。我想我可以在打開編輯對話框時將其設置爲「重置」,但我相信有人可以通過簡單的方法解決這個問題。

+0

什麼是觸發這個代碼?可能有助於解決您的問題。 – Loktar 2011-06-02 19:59:17

+0

這是對一個WCF服務的ajax調用的成功函數,它本身是通過點擊事件調用的。 – 2011-06-02 20:17:00

回答

6

使用.show()之前.fadeOut()

window.parent.$(".Toast").html('Successfully Did Something!').show().fadeOut(9000); 

要取消當前的動畫,使用.stop(true, true)

window.parent.$(".Toast").html('Successfully Did Something!').stop(true, true).show().fadeOut(9000); 
+0

男人,我認爲這是要解決我的問題。作爲另一種解決方案,它確實有效,但如果在完全消失之前嘗試再次觸發事件,則無法工作。你必須等到第一個完成。想法? – 2011-06-02 20:10:59

+1

@Scott - 使用'.stop(true,true)'。我已經更新了我的答案。 – gilly3 2011-06-02 20:19:31

2

有一個回調函數可以作爲參數添加到fadeOut。一旦動畫完成,它將被調用。退房的文檔,在這裏:fadeOut Docs

所以,試試這個:

window.parent.$(".Toast").html('Successfully Did Something!').fadeOut(9000, function(){ 
    window.parent.$(".Toast").html('') 
}); 
+0

這是有道理的...現在嘗試 – 2011-06-02 20:00:18

+0

裏面的匿名函數,你也可以使用$(this)引用正在動畫的節點(而不是「再次」選擇它) – 2011-06-02 20:04:10

+0

謝謝!這是有效的,但如果它沒有完成,它將不會註冊下一個(這是有道理的)。有關於此的任何想法?我應該讓它成爲一個新問題嗎? – 2011-06-02 20:06:26

0

你只需要展示的元素,一旦你更改HTML:

window.parent.$(".Toast").html('Successfully Did Something!').show().fadeOut(9000); 

,但是,我認爲,延遲了,你要尋找的效果:

window.parent.$(".Toast").html('Successfully Did Something!').fadeIn().delay(9000).fadeOut(); 
0

如果你正在處理的iframe,你可以試試下面的代碼?它應該解決你的問題。

window.top.$(".Toast").html('Successfully Did Something!').fadeOut(9000, function(){ 
    $(this).html('').css("opacity", 1).hide(); 
});