2013-02-05 64 views
0

我創建了一個字符串數組,格式爲「monthX」,其中數字是整個數組中增加的數字。引用函數中的數組項(以字符串形式)javascript

我有一個函數,我試圖引用該數組的特定項目,但它不斷進來未定義。這是我的代碼:

function listCategories() { 
    categoryList.innerHTML = "" 

    for (var propertyName in categoryObject) { 
     var rowHTML = "<div>" 
     rowHTML += "<span class = 'category'>" + categoryObject[propertyName].name + "</span>" 
     rowHTML += "<span class = '" + monthList[3] + "'><input/></span>" 
     rowHTML += "</div>" 
     categoryList.innerHTML += rowHTML 
    } 
} 

//Months to load in 
for (var i=0; i<24; i++) { 
    monthList[i] = "month" + (i + startingMonth) 
} 

我感興趣的領域是「monthList [3]」行。即使我console.log(monthList [3])它正確地說「month6」,它仍然是未定義的。有任何想法嗎?我的代碼中有錯誤嗎?

回答

0

那麼,有兩個問題: 你什麼時候調用「listCategories()」?你設置了monthList之前還是之後的 ?

而且,你有沒有爲monthList設置全局?

//globalize monthList array to be usable in functions 
var monthList; 

function listCategories() { 
    categoryList.innerHTML = "" 

    for (var propertyName in categoryObject) { 
     var rowHTML = "<div>" 
     rowHTML += "<span class = 'category'>" + categoryObject[propertyName].name + "</span>" 
     rowHTML += "<span class = '" + monthList[3] + "'><input/></span>" 
     rowHTML += "</div>" 
     categoryList.innerHTML += rowHTML 
    } 
} 

//Months to load in 
for (var i=0; i<24; i++) { 
    monthList[i] = "month" + (i + startingMonth) 
} 

//do NOT CALL listCategories prior this line!! 

這應該做

+0

這仍然有問題。你已經聲明瞭'monthList',但你沒有將它定義爲一個數組。這將導致錯誤,如「TypeError:不能將undefined轉換爲對象」 – JAAulde

+0

謝謝,itsid! 當你說://不要CALL listCategories之前,你給了我答案! – isaachess

+1

@JAAulde,uups你是對的...對不起,我錯過了,那天我有太多的PHP,你可以把對象放在以前的布爾變量中,就像那樣。 – itsid

0

在你告訴我們的代碼,你永遠不聲明或monthList它定義爲一個數組。

function listCategories() { 
    categoryList.innerHTML = "" 

    for (var propertyName in categoryObject) { 
     var rowHTML = "<div>" 
     rowHTML += "<span class = 'category'>" + categoryObject[propertyName].name + "</span>" 
     rowHTML += "<span class = '" + monthList[3] + "'><input/></span>" 
     rowHTML += "</div>" 
     categoryList.innerHTML += rowHTML 
    } 
} 

var monthList = [], 
    startingMonth = 1; 

//Months to load in 
for (var i=0; i<24; i++) { 
    monthList[i] = "month" + (i + startingMonth) 
} 

請注意我在函數定義之後但在循環之前添加的其他行。