2012-05-23 35 views
2

我有以下的jQuery腳本:有我的div消失之前繼續處理

function fctSaveSuccess(data) { 
    fctHideLoadingDlg(); 
    alert('continue...'); 
    ... 
} 

function fctHideLoadingDlg(disableBtn) { 
    $("#loading").fadeTo(5000, 0.5, function() { 
     $("#loading").dialog('destroy').remove(); 
    }); 
} 

我想實現的,就是我裝格(一種彈出的等待)慢慢消失。但它不起作用,因爲當fctHideLoadingDlg被稱爲下面的代碼時,即使我已經設置了5000的褪色,它仍然會被執行...

任何想法如何防止這種情況?

謝謝。

+0

注意:不要叫'$(「#裝載」)'不必要的兩倍,這是非常低效。這意味着查詢DOM兩次。使用'$(this)'或將結果緩存在一個變量中並使用它。 – kapa

+0

這將是一個好主意,建立一個jsFiddle,演示你的問題。 div的開始不透明度是什麼?當你開始動畫時,它可能已經是'0.5'了嗎? *在當前顯示的*代碼中看不到任何可能的問題。 – kapa

+0

我在這裏創建了一個jsFiddle:http://jsfiddle.net/uDNtY/2/點擊鏈接時,即使fadeOut沒有完成,您也會看到提醒消息。這是我的問題。 – Bronzato

回答

0

這很正常。 fctSaveSuccess的執行不會被阻止,因爲fctHideLoadingDlg將在撥打fadeTo後立即返回。 fadeTo傳遞一個回調,它會在完成時運行,但不會阻止。

您可以在代碼中採用相同的回調路線。函數是在JavaScript對象,所以他們也可以很容易地通過周圍的參數:

function fctSaveSuccess(data) { 
    var afterHide = function() { 
     alert('continue...'); 
     /* rest of your code */ 
    }; 
    fctHideLoadingDlg(afterHide); 
} 

function fctHideLoadingDlg(callback, disableBtn) { 
    $("#loading").fadeOut(5000, function() { 
     callback(); 
     $("#loading").dialog('destroy').remove(); 
    }); 
} 

jsFiddle Demo

+0

太好了,謝謝! – Bronzato