我使用事件监听器将其写出来但它不起作用,即使点击它们,方块也保持黑色。我找到了一些我修复过的拼写错误,但我不确定使用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;
}
答案 0 :(得分:2)
两个基本问题:
squares[0]
,它应该是squares[i]
,所以你将处理程序多次绑定到第一个元素而不是其他元素。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();
}
答案 1 :(得分:1)
答案很简单。我的以下代码变更按预期工作。 :http://codepen.io/anon/pen/MwgEdm
首先,您需要修改for循环,而是引用索引0而不是i:
for(var i = 0; i < squares.length; i++) {
squares[i].addEventListener("click", changeColor);
}
其次,您需要在更改颜色函数中引用'this',并为事件对象传入e:
function changeColor(e) {
this.style.backgroundColor = randomColor();
}
答案 2 :(得分:-1)
使用.addEventListener()
您需要更改:
function changeColor(event) {
event.style.backgroundColor = randomColor();
}
到
function changeColor(){
// not using Event Object
this.style.backgroundColor = randomColor();
}
,但让我们面对它.getElementsByClassName()
无法向后兼容。
我建议如下:
var doc = document, bod = doc.body;
function E(e){
return doc.getElementById(e);
}
function inArray(x, a){
for(var i=0,l=a.length; i<l; i++){
if(a[i] === x){
return true;
}
}
return false;
}
function getElementsByClass(className, element){
var r = false;
var el = element ? element : doc;
if(el.getElementsByClassName){
r = el.getElementsByClassName(className);
}
else{
var all = el.getElementsByTagName('*'), l = all.length;
if(l > 0){
r = [];
for(var i=0; i<l; i++){
var s = all[i].className.split(/\s/);
if(inArray(className, s))r.push(all[i]);
}
}
return r;
}
function randomColor(context){
context.style.backgroundColor = 'rgb('+Math.floor(Math.rand()*256)+','+Math.floor(Math.rand()*256)+','+Math.floor(Math.rand()*256)+')';
}
现在它就像:
var all = getElementsByClass('square');
for(var i=0,l=all.length; i<l; i++){
(function(i){ // in case you want to add more array stuff
all[i].onclick = function(){
randomColor(this);
// do more stuff here
}
})(i); // end of closure
}
注意:Math.random()
会返回介于0和.9之间的数字,重复,永远不会为1.您的当前公式永远不会得到255。
答案 3 :(得分:-1)
你应该使用JQuery来做到这一点,它相对容易。将此链接放在您的头标记之间:<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
然后将此代码放入您的javascript:
$(document).ready(function(){
$('.square').click(function(){
$('.square').addClass('green');
});
});
这是demo