我无法使用此数组函数。我有几个div
元素id="cell1"
,"cell2
,cell3
...
这个函数声明有什么问题?我收到以下错误:
无法设置属性' 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";
};
答案 0 :(得分:4)
您
cell.onclick = function...
将<{1}}属性添加到数组,而不是其任何元素。所以它不会(例如)被单击的单元调用。
如果将它附加到元素本身,它将起作用:
onclick
......虽然这会产生比你需要的功能更多的功能;单个处理程序可以处理所有这些:
for (i = 1; i < 6; i = i + 1) {
cell[i] = document.getElementById('cell' + i);
cell[i].onclick = function () {
this.style.background = "red";
};
}
附注:确保在元素已存在之后运行此代码。确保这一点的最佳实践方法就是将脚本放在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";
};
}
将i = 1
更改为i = 0
,因为数组中的第一个对象具有索引0,在您的情况下,您首先访问除之外的所有对象。
cell
是数组,因为您将其声明为:var cell = [];
。数组不处理onclick
事件,但其对象(在您的情况下)确实如此。
您正在循环遍历数组元素,因此我们将
放入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对象。