2013-04-16 107 views
2

我必須調用表單提交兩個函數,但我想確保第二個函數只在第一個函數執行後才執行。 我無法控制第一個功能,所以我根本無法編輯它。表單提交多個函數jQuery

function a(et){ 
    //function a script 
} 

function b(evt){ 

//function b script 
} 

from function b is there a way that i can check if function a was completed or executed fully. 
+0

那麼函數a是異步的? – Musa

+0

你可以有一個全局變量,並將其值設置爲函數a中的某個常量值。然後在調用函數b –

+0

之前檢查該值,看看這個,這可能對你有幫助。 http://stackoverflow.com/questions/1370766/how-to-detect-when-one-function-is-complete-from-another-function – jycr753

回答

0

根據Eli Grey你可以測試這樣的:

function foo() { 
    foo.complete = false; 
    // your code here 
    foo.complete = true; 
} 
foo.complete = false; 

if (foo.complete) { // foo execution complete 
    // your code here 
} 
+0

問題是我不能更新函數foo(),所以我如何添加foo.complete =?裏面的函數foo():( – nyshangal

+0

那麼JavaScript有一個單一的執行流程,所以當一個函數調用它時會執行,所以你可以做的只是放一些事件調用,比如setInterval,如果這個布爾變爲true,他們完成的第一個功能是執行下一個功能的綠線 – jycr753

1

,如果你有a沒有任何訪問那麼你可以不是你想在這裏做什麼。沒辦法:當一個函數被調用時,JS創建一個調用對象,當調用完成時,它會自動GC。不幸的是,實際的內存管理是不受限制的,所以你無法檢查。其他的詭計涉及你干涉功能a的代碼,你說你不能得到...所以不,你不能這樣做。

對不起,但正如常見問題解答所說:你可能並不總是得到你所希望的答案,但這並不意味着你不喜歡的答案是不正確的......: P


有,但是,希望你的一點點:如果兩個功能ab是回調或提交事件的處理程序,你可以排隊到這些電話的方式。鑑於jQuery標籤.queue() suggests itself

0

是的,你可以,有很多方法可以做到這一點,但這是一個簡單的方法來實現它。
您可以使用持久對象localStorage
您可以使用會話對象sessionStorage

function a(evt){ 
    // Asynchronous function 
    // ... your code here 
    // before finish function create the persistent object 
    localStorage.setItem('myObject', 'done'); 
    return; 
} 

function b(evt){ 
    // Checks if a() function was completed 
    var _done = localStorage.getItem('myObject'); 
    if(_done && _done == 'done') { 
    // your code here: the a() function was completed 
    localStorage.removeItem('myObject'); 
    } 
} 
+0

OP不能這樣做:他沒有訪問'a'的功能,而且'localStorage'不是X瀏覽器友好的(舊版瀏覽器不支持它) –

+0

您可以使用[jQuery.data()](http://api.jquery.com/data/)函數將自定義數據添加到您的dom對象。 實現與在上面的示例中,您可以將數據添加到您的dom對象,如下所示: '$(「#div-response」)。data(「myObject」,「done」);' 要刪除數據,您可以使用[jQuery.removeData ()](http://api.jquery.com/removeData/)像這樣: '$(「#div-response」)。removeData(「myObject」);' – jherax

+0

爲什麼不使用jQuery,爲什麼不簡單地使用'document.getElementById('div-response')。setAttribute('data-myObject','done 「);'?老實說,[沒有什麼jQ呢,這不能在香草JS](http://stackoverflow.com/questions/16472714/what-features-does-jquery-provide-that-arent-available-natively-in瀏覽器) –