2015-11-19 117 views
0

1.我想將id [i]推入全局數組中。當我推動後,它將是每個數組中的id.length數字項,但它會是錯誤的,並說y不是function.how來解決它?Javascript循環插入全局數組

2.底部的sendrequest會發送一個xmlhttprequest給服務器,但我不明白它爲什麼會先運行然後函數(parResponse)會在tmpReadRequest.sendReadRequest()後觸發。已經下降。

非常感謝

var tes0=new Array(); 
    var tes1=new Array(); 
    var tes2=new Array(); 
    var tes4=new Array(); 
    var tes5=new Array(); 
    function ReadValuePath(id, Variable,id_2) { 
     var tmpReadCB = function(parResponse) 
     { 
      for (var tmpIndex = 0; tmpIndex < parResponse.length; tmpIndex++) 
      { 
       var tmpItemValue = parResponse[tmpIndex];//console.log(tmpItemValue); 
       var tmpValue = (tmpItemValue.mItemValue) ? tmpItemValue.mItemValue : tmpItemValue.mItemResultId; 
       if(document.getElementById(id[tmpIndex]) != null && document.getElementById(id_2[tmpIndex]).value != 0) 
       { 
        document.getElementById(id[tmpIndex]).value = parseFloat(tmpValue).toFixed(2); 
       } 
      } 
      return true; 
     } 
     var tmpReadRequest = new OPCReadRequest("DE", tmpReadCB); 
      for(var z=0;z<5;z++){ 
      for(var i = 0; i < id.length; i++) 
      var y="tes"+z; 
      y.push(id[i]); 
      tmpReadRequest.addItem("ab", Variable[i]); 
     } 
} 
    tmpReadRequest.sendReadRequest(); 
} 
+0

'y'不是一個數組,因此它沒有'推'的方法,因此你的例外。除非它是由var y =「tes」+ z'覆蓋的全局變量。 – ste2425

+0

如何訪問全局數組var var0到5? – yichengwang

+0

您可以使用'window'對象和字符串文字或稍微改變您的結構,以便您的數組位於對象中,然後使用該對象的字符串字面值。所以第一個選項是'window [y] .push(id [i])'; – ste2425

回答

0

要通過字符串文字來訪問全局作用域,就像您正在嘗試的一樣,您可以使用當前全局作用域的窗口對象。

所以在你的情況下,它應該是window[y].push(id[i]);

另一種選擇是稍微改變你的結構,因爲我個人不喜歡直接訪問窗口。根據意見

arrays[y].push(id[i]) 

編輯

所以,你要訪問一個全局變量:

,所以你可以定義數組一樣

var arrays = { 
    tes0: [], 
    tes2: [], 
    tes3: [], 
    tes4: [], 
    tes5: [], 
} 

和訪問他們像循環。你在那裏的一半。你在做什麼是建立一個字符串y其中包含屬性名稱,然後使用方括號中的訪問該屬性。

於是用window選項,這將是:

for(var z=0;z<5;z++){ 
    var y="tes"+z; 
    for(var i = 0; i < id.length; i++) 
     window[y].push(id[i]); 
    } 
} 

或與第二對象選項

/* 
    Because arrays is an object we can use Object.keys 
    This will return an array of the keys in our object which we can loop over to access each one 
*/ 
Object.keys(arrays).forEach(function(key) { 
    for(var i = 0; i < id.length; i++) 
     arrays[key].push(id[i]); 
    } 
}); 

希望幫助解釋

+0

循環遍歷tes0〜5,但我的目的是使用z – yichengwang

+0

循環遍歷tes0〜5讓我更新我的答案來解釋,你已經可以。 – ste2425

+0

我得到了你。但你知道爲什麼「tes」+ z;不行? – yichengwang

0

「的功能之外聲明的變量,成爲全球

一個全局變量具有全局範圍:。在網頁上的所有腳本和函數可以訪問它」 @Source

Y不是一個數組,所以.push()將無法工作。 @Source