2014-07-10 26 views
0

好吧,我有一個div:等待被添加到一個div

<div class="moreStuff"> <p>stuff in here matters</p></div> 

和一些JavaScript:

weiredFunction(takes,some,values); 

這個 「weirdFunction()」 需要一些價值觀,做一些非重要的東西,並添加/附加到div.moreStuff。

後直接 「WeirdFunction()」 我有我自己的函數:

stuffIWantToDo(...); 

的 「stuffIWantToDo()」 檢查div.moreStuff並根據它的數據作出反應。

問題是「weirdFunction()」需要大約300ms的時間來完成它的buisness,並將其數據添加到div.moreStuff,但是我的函數「stuffIWantToDo()」在300ms之前取消;這意味着在「stuffIWantToDo()」運行時,div中沒有​​任何內容。

我想阻止「stuffIWantToDo()」運行直到「weirdFunction()」將數據追加到div.moreStuff。

+2

聽起來像你的'weiredFunction'做異步的東西,你應該發佈它 – tymeJV

回答

0

設法讓stuffIWantToDo()在weiredFunction()的回調函數

function weiredFunction(callback) { 
    // finish the weird thing 

    // Call the callback 
    callback('some','stuff','there'); 
} 

function stuffIWantToDo(a, b, c) { 
    // I'm the callback 
    alert(a + " " + b + " " + c); 
} 

weiredFunction(foo); 

入住此SO帖子:Create a custom callback in JavaScript

0

如果您使用的是一些jQuery的要求,那麼我們需要看到它, @tymeJV已經說了,看起來就像你有一些async代碼涉及weiredFunction function

如果沒有,你的代碼必須努力synchronously,你唯一需要的,就是打電話給你stuffIWantToDo function作爲回調,或在第一個結尾。

如果沒有這個你明白了,然後用舊的和衆所周知setTimeout javascript function

function weiredFunction(takes,some,values){ 

    /* some weired stuff here */ 

    setTimeout(function() { 
     stuffIWantToDo(...); 
    }, 300); 

} 
0

如果我理解你的權利,你有沒有可能改變weiredFunction。基於這一假設,您必須編寫一個小的基於間隔的觀察者,一旦內容發生變化就會觸發您的功能。

var stuffContent = ''; 
window.setInterval(function() { 
    var currentStuffContent = $('.moreStuff').html(); 
    if(currentStuffContent == stuffContent) return; 
    stuffContent = currentStuffContent; 
    stuffIWantToDo(); 
}, 50); 

但是,如果您只是在weiredFunction中作爲回調觸發stuffIWantToDo,那將是最好的。