javascript - 当使用 JavaScript 单击方 block 时,如何使方 block 的颜色发生变化?

标签 javascript html event-handling dom-events onclicklistener

我已经使用事件监听器将其写出来,但它不起作用,并且即使单击它们,方 block 仍保持黑色。我发现了一些拼写错误,已修复,但我不确定使用 getElementsByClassName 是否正确。

html:

<!DOCTYPE html>
<html>
<head>
<title></title>
<style>
    .square {
        width: 100px;
        height: 100px;
        background-color: #000000;
        margin: 5px;
     }
   </style>
  </head>
 <body>

 <div id="container">
 <div class="square"></div>
 <div class="square"></div>
 <div class="square"></div>
 <div class="square"></div>
 </div>

<script src="js/main.js"></script>
</body>
</html>

和 JavaScript:

var squares = document.getElementsByClassName('square');

for(var i = 0; i < squares.length; i++) {
squares[0].addEventListener("click", changeColor);
}

function changeColor(event) {
event.style.backgroundColor = randomColor();
}


function randomColor() {

var randomRed = Math.floor(Math.random() * 255);
var randomGreen = Math.floor(Math.random() * 255);
var randomBlue = Math.floor(Math.random() * 255);
//create the string that is the ‘random color’
var randomColor = "rgb("+randomRed+","+randomGreen+","+randomBlue+")";

return randomColor;
}

最佳答案

两个基本问题:

  1. 您的 for 循环有一个硬编码的 squares[0],而它应该是 squares[i],因此您将处理程序多次绑定(bind)到第一个元素,并且不给其他人。
  2. event 对象没有 style 属性。使用 this.style.backgroundColor - 在处理程序中 this 将引用单击的元素。或者使用event.target.style.backgroundColor

就像这样:

for(var i = 0; i < squares.length; i++) {
  squares[i].addEventListener("click", changeColor);
}

function changeColor(event) {
  this.style.backgroundColor = randomColor();
}

演示:http://jsfiddle.net/oueLs5dp/

关于javascript - 当使用 JavaScript 单击方 block 时,如何使方 block 的颜色发生变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29725608/

相关文章:

html - 使用css在另一个悬停时显示元素

javascript - 是否可以在页面其他部分加载后克隆图像而不加载?

javascript - 如何删除带有匿名函数的addEventListener 的EventListener?

javascript - 单击时用 "display: table-cell"展开 div?

c# - 使用 EventHandler 更新主线程中的控件

Javascript:删除附加到对象方法的匿名函数的事件监听器

javascript - 如果不使用新的 if 语句,我将如何比较特定值?

javascript - 在 JavaScript 中将模型数据传递到 nvd3 图表

javascript - 在页面加载时加载 CSS3

javascript - 通信子父 ReactJs