2014-06-12 73 views
0

我無法使此數組函數正常工作。我有幾個div元素id="cell1","cell2,cell3 ...無法獲得函數聲明工作

這個函數聲明有什麼問題?我收到以下錯誤:

Cannot set property 'background' of undefined

這裏是我的代碼:

var cell = []; 
var i; 
for (i = 1; i < 16; i = i + 1) { 
    cell[i] = document.getElementById('cell' + i); 
} 
cell.onclick = function() { 
    this.style.background = "red"; 
}; 
+0

你可以發佈你收到的錯誤嗎? –

+0

無法設置未定義的屬性「背景」 – JacobLutin

+0

我看不出你如何得到你描述的錯誤,而不是來自該代碼。 –

回答

4

cell.onclick = function... 

增加了一個onclick屬性的陣列,沒有任何的元素。所以它不會(例如)被點擊單元調用。

如果你把它連接到元素本身,它將正常工作:

for (i = 1; i < 6; i = i + 1) { 
    cell[i] = document.getElementById('cell' + i); 
    cell[i].onclick = function() { 
    this.style.background = "red"; 
    };  
} 

Live Example

...雖然這創造了很多更多的功能比你的需要;單個處理器可以處理所有的人:

for (i = 1; i < 6; i = i + 1) { 
    cell[i] = document.getElementById('cell' + i); 
    cell[i].onclick = handleClick;  
} 

function handleClick() { 
    this.style.background = "red"; 
} 

Live Example


邊注:請確保您的元素已經存在後運行此代碼。最佳實踐方式可以確保只需在關閉</body>標記之前將腳本放在HTML的最底部,以便創建腳本上方HTML定義的所有元素。


邊注2:在JavaScript數組索引0開始,所以你cell陣列將在指數0有一個空的元素。它沒有任何傷害,但我認爲值得一提。

+2

另外,他應該在加載這些文檔元素時調用腳本。 – stanleyxu2005

1

這是現在與OP最新的編輯沒有實際意義。

沒有拉開代碼的其餘部分,這是直接的問題:

cell.onclick = function() {... 

你試圖東西綁定到一個不存在的事件,即 onclick陣列上,而不是頁面中的元素。您需要綁定針對特定指數,即:

cell[i].onclick = function() {... 
2

應該

for (i = 0; i < 16; i = i + 1) { 
    cell[i] = document.getElementById('cell' + i); 
    cell[i].onclick = function() { 
     this.style.background = "red"; 
    }; 
} 
  1. 變化i = 1i = 0,因爲在數組第一個對象具有指數0,你的情況,你要訪問的所有對象除了第一。

  2. cell是數組,因爲您聲明爲:var cell = [];。數組不處理onclick事件,但它的對象(在你的情況)。

  3. 您通過數組的元素循環,所以我們把

    cell.onclick = function() { 
        this.style.background = "red"; 
    }; 
    

    環路。但我們記得陣列不處理onclick事件,因此我們添加[i] - 它爲此陣列中的所有元素添加相同的on click

0

此:

cell.onclick = function() { 
this.style.background = "red"; 
}; 

應該是這樣的:

for(var i = 0; i < cell.length; i++){ 
    cell[i].onclick = function(){ 
     //do your click action... 
    } 
} 

你在幹什麼,你點擊事件連接到陣列的方式,而不是你需要附加到數組中的div對象。