gpt4 book ai didi

javascript - 继续报错说某物不是函数但找不到原因

转载 作者:行者123 更新时间:2023-11-28 06:09:41 25 4
gpt4 key购买 nike

我一直在尝试为一个有 145 个盒子的类(class)创建一些东西,其中每五个盒子都是白色的。通过单击一个框,颜色应更改为相反的颜色,并将鼠标悬停在它们上方应更改不透明度。我已经能够以正确的方式创建 145 个框,但我不知道如何通过单击更改它们。我无法以任何方式更改给定的 html,因此我必须使用函数和事件监听器来更改它们。我尝试创建一个函数,将单击的任何黑框更改为白框,但它说它不是函数(最后一行出现错误)。我可能只是犯了一个简单的错误,任何人都可以帮助我和/或将我推向正确的方向。

Html(给定):

<html>
<head>
<title>A test</title>

<script>

</script>
</head>
<body style="background-color:#337799; margin:0px; padding:0px;">
<div id="wrapper" style="width:960px; overflow:hidden; margin:auto; background-color:black;">
</div>
</body>
<script src="assignment10.js"></script>

JS:

var blackBg = document.getElementById('wrapper');

for (var i=1; i<145; i++){

var repeatSq = document.createElement('div');

repeatSq.style.float = "left";
repeatSq.style.height = "50px";
repeatSq.style.width = "50px";
repeatSq.style.backgroundColor = "black";
repeatSq.style.opacity = ".5";
repeatSq.style.border = "solid black 5px";
repeatSq.className = "black";

if(i%5 === 0){
repeatSq.style.backgroundColor= "white";
repeatSq.style.border= "solid white 5px";
repeatSq.className = "white";
}

blackBg.appendChild(repeatSq);

}

var blackBoxes = document.getElementsByClassName('black');

var boxChange = function(evt){

evt.target.style.backgroundColor="white";
evt.target.style.border = "solid white 5px";

}

blackBoxes.addEventListener('click', boxChange);

最佳答案

问题在于 blackBoxes 是一组 DOM 元素,因此您必须迭代该集合并在每个 DOM 元素上单独使用 addEventListener:

Array.from(blackBoxes).forEach(function(blackBox) {
blackBox.addEventListener('click', boxChange);
});

工作 fiddle :https://jsfiddle.net/od9md4y8/

Array.from() 是必需的,因为尽管 blackBoxes 是 DOM 元素的“集合”,但它不是真正的数组。 Array.from() 将返回由 blackBoxes 中的元素组成的真正数组。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/from

但是,有一个更好的方法可以做到这一点:在创建元素时将事件监听器添加到元素中!

if(i%5 === 0){
repeatSq.style.backgroundColor = "white";
repeatSq.style.border = "solid white 5px";
repeatSq.className = "white";
}
else {
repeatSq.addEventListener('click', boxChange);
}

https://jsfiddle.net/od9md4y8/1/

关于javascript - 继续报错说某物不是函数但找不到原因,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36521107/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com