无法获得功能声明

时间:2014-06-12 12:13:39

标签: javascript arrays

我无法使用此数组函数。我有几个div元素id="cell1""cell2cell3 ...

这个函数声明有什么问题?我收到以下错误:

  

无法设置属性' background'未定义的

这是我的代码:

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";
};

4 个答案:

答案 0 :(得分:4)

cell.onclick = function...

将<{1}}属性添加到数组,而不是其任何元素。所以它不会(例如)被单击的单元调用。

如果将它附加到元素本身,它将起作用:

onclick

Live Example

......虽然这会产生比你需要的功能更多的功能;单个处理程序可以处理所有这些:

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

Live Example


附注:确保在元素已存在之后运行此代码。确保这一点的最佳实践方法就是将脚本放在HTML的最底层,就在结束for (i = 1; i < 6; i = i + 1) { cell[i] = document.getElementById('cell' + i); cell[i].onclick = handleClick; } function handleClick() { this.style.background = "red"; } 标记之前,以便创建脚本上方的HTML定义的所有元素。


附注2:JavaScript中的数组以索引</body>开头,因此您的0数组在索引cell处将有一个空元素。它没有任何伤害,但我认为值得一提。

答案 1 :(得分: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 = 1更改为i = 0,因为数组中的第一个对象具有索引0,在您的情况下,您首先访问除之外的所有对象

  2. cell是数组,因为您将其声明为:var cell = [];。数组不处理onclick事件,但其对象(在您的情况下)确实如此。

  3. 您正在循环遍历数组元素,因此我们将

    放入
    cell.onclick = function () {
        this.style.background = "red";
    };
    
    循环中的

    但我们记得数组没有处理onclick个事件,所以我们添加了[i] - 它为此数组中的所有元素添加了相同的on click

答案 2 :(得分:1)

OP的最新编辑现在没有用。

如果没有拆开剩下的代码,这就是当前的问题:

cell.onclick = function () {...

您尝试将某些内容绑定到不存在的事件,即数组上的onclick,而不是页面中的元素。您需要绑定特定的索引,即:

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

答案 3 :(得分:0)

此:

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

应该是这样的:

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

您正在执行的操作是将click事件附加到数组,而是需要附加到数组内的div对象。