2012-08-10 55 views
0

我聲明變量,函數以外,像這樣:的Javascript全局數組與jquery .push在替代函數返回空數組

var vitalsValuesChecked = []; 

則功能的內部我做的:

vitalsValuesChecked.push('foobar'); 

在後面的函數中,我需要遍歷數組來推送項目,並且始終沒有得到我期望的結果。所以在同樣的功能裏,我添加了console.log(vitalsValuesChecked);,它返回[]

編輯下面的代碼示例; 編輯2固定碼下面

var vitalsValuesChecked = []; 

$(document).delegate("#hv-byresult-btn", "click", function() { 
    var vitalsTypeList = ['bp', 'ht', 'wt', 'pulse', 'resp', 'temp']; 
    vitalsValuesChecked = []; 
    for (var i = 0;i < vitalsTypeList.length;i++) { 
     if (document.getElementById(vitalsTypeList[i]).checked == true) { 
      vitalsValuesChecked.push(vitalsTypeList[i]); 
      console.log(vitalsTypeList[i] + " is checked. Adding to global array"); 
     } 
    } 
    $('#vitals-measures-content').empty(); 
    navigate("#vitals-measures"); 
    for (var i = 0;i < vitalsValuesChecked.length;i++) { 
     console.log("vitalsValuesChecked at index " + i + " is " + vitalsValuesChecked[i]); 
    } 
     readRec('clinicalObservation', null, sortVitalsByResult); 

    }); 
function foobar() { 
    console.log(vitalsValuesChecked); //return [] 
    for (var i=0;i < vitalsValuesChecked.length;i++) { 
     var valueSelected = vitalsValuesChecked[i]; 
     console.log("Value of vitalsValuesChecked at index " + i + " is " + vitalsValuesChecked[i]); 
    } 
} 
+4

你能告訴我們這個函數,或者它的最小版本來重現這個問題嗎? – 2012-08-10 21:13:41

+0

如果你發佈你的代碼,這將有所幫助。 – 2012-08-10 21:14:19

+1

您必須向我們展示導致問題的ACTUAL代碼,因爲'.push()'沒有任何問題。 – jfriend00 2012-08-10 21:19:32

回答

2

您已定義vitalsValuesChecked兩次這是一個問題。一個是全局的,一個是委託()回調本地的。局部定義覆蓋了全局定義,所以當你認爲你將值設置到全局變量中時,你不是 - 你只是改變了局部變量,而局部變量只有有限的生命週期,因此你的數據在後面的全局變量中不可用。

您應該刪除

var vitalsValuesChecked = []; 

委託處理程序中,因此所有的修改對單一的全局變量發生。

+0

美麗的發現!非常感謝。 – 2012-08-10 21:21:57

+0

我將其更改爲'vitalsValuesChecked = []'清除數組並刪除'var'。非常感謝。只要它讓我接受,我會盡快接受你的回答。 – 2012-08-10 21:24:13

1

該函數裏面的var vitalsValuesChecked = [];會創建一個局部變量。如果您嘗試推入全局變量,我認爲您不需要這個。