![](/img/trans.png)
[英]VM323:1 Uncaught TypeError: Cannot read property 'add' of undefined
[英]Uncaught TypeError: Cannot read property 'add' of undefined
我在.js
文件中编写了以下代码:
var tiles = document.querySelectorAll(".tile");
var tileNumbers = ["one", "two", "three", "four"];
for(var i = 0; i < tiles.length; i++){
var num = Math.floor(Math.random() * tileNumbers.lenth);
tiles.classList.add(tileNumbers[num]);
tileNumbers.pop(num);
}
.tile
是.html文件中的4个<div>
,我正在尝试分别为四个图块添加一个类。 这些类保存在tileNumbers
。 当我在Chrome中运行代码时,出现错误:
“未捕获的TypeError:无法读取未定义的属性'add'。”
我很确定一切都拼写正确。 请帮忙!
您想在图块上调用add
,但是尝试访问tiles
数组本身的add
函数。 这不存在。
您需要做的是访问每个单独图块的add
功能。 为此,请首先获取它:
var tile = tiles[i];
然后,将通话更改为
tile.classList.add(…);
(您也可以忽略临时变量tile
,而直接使用tiles[i].classList.add
。但是IMHO使用专用变量使代码更易于阅读。)
另一个可能更好的选择是使用forEach
。 由于您仅将i
用于访问当前元素,而没有别的选择,因此您基本上希望对每个元素执行一个操作。 您也可以像这样进行操作(对于积分,这甚至可以保护您免于一次失误):
tiles.forEach(function (tile) {
// ...
});
然后,在函数体内,您将自动拥有一个可以按所需方式访问的可变tile
。
而已 :-)
tiles[i].classList.add(tileNumbers[num]);
不
tiles.classList.add(tileNumbers[num]);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.