2012-04-17 60 views
0

我會這樣看會被載入變量之前執行的腳本..等待一個變量存在,那麼做一些事情在JavaScript

這是我的腳本,將首先執行

funcThatWaits(varToWait).ready(function(){ 
     //callback time!! 
    alert("varToBeWait is Ready!!"); 
}); 

,這是要加載

var varToWait=null; 

所有我想要的是當它檢測到創建一個函數,將等待一個變量存在,並自動執行回調腳本,這將是下一個變量已經存在了。(這意味着當變量不存在,它將等待)

這可能嗎?我的第一個腳本完全複製到jquery的$(document).ready()函數中,該函數等待DOM被完全加載......這是否可以用於JS變量?

+2

什麼樣的事件定義你的變量等待? – m90 2012-04-17 09:03:45

+1

變量如何使它成爲*盛大入口*?它來自ajax結果嗎?或其他功能? – Joseph 2012-04-17 09:07:17

+0

它只是在單獨的JS文件執行的變量,第一個被執行的腳本是在一個單獨的js文件,並第一次加載變量之前。第二個腳本產生的變量和動態生成,這就是爲什麼我需要知道變量是否已經存在 – 2012-04-17 09:08:50

回答

1

如果你的變量來自另一個功能(也許從另一個範圍內),那麼你可以傳遞一個回調,並且當第二函數執行回調提供它的變量。您無需等待什麼時候會存在,但你會等到第二腳本提供爲你

//in the second script: 

var varIWant = 'foo' 

function fromSecondScript(callback){ 
    callback(varIWant); 
} 

//in the first script: 

function fromFirstScript(){ 
    fromSecondScript(function(theVar){ 
     //"theVar" in this function scope is "varIWant" from the other scope 
    }) 
} 

另一種方式來做到這一點是必須事先定義爲聚集回調裝載腳本,並打電話給他們,一旦他們的變量設置:

var aggregator = (function(){ 
    var stored = {}; 

    return { 
     //adds a callback to storage 
     addCallback : function(varName,callback){ 
      if(!stored.hasOwnProperty(varName)){ 
       stored[varName] = []; 
      } 
      stored[varName].push(callback); 
     }, 
     //executes stored callbacks providing them data 
     execute : function(varName,data){ 
      if(stored.hasOwnProperty(varName)){ 
       for(var i=0;i<stored[varName].length;i++){ 
        stored[varName][i](data) 
       } 
      } 
     } 
}()); 

//in the first script add callbacks. you can add any number of callbacks 
aggregator.addCallback('VarExists',function(theVar){ 
    //do what you want when it exists 
}); 

aggregator.addCallback('VarExists',function(theVar){ 
    //another callback to execute when var exists 
}); 

//in the second script, execute the callbacks of the given name 
aggregator.execute('VarExists',theVarYouWantToShare); 
+0

我不能讓jquery準備好了嗎?哪個更簡單?問候感謝您的回答^^ – 2012-04-17 09:28:40

+1

還是更新我的答案:d – Joseph 2012-04-17 09:30:39

+0

啊謝謝你......我會等你的答案:d。我想很簡單的代碼,因爲我需要重複使用的第一個腳本許多times..I已經落到了你的第一個答案(如學習JavaScript函數),但它不是真正的我需要.. – 2012-04-17 09:34:19

相關問題