我在单击p
元素时试图更改drumkey
类的背景色。但是,加载页面而不是onClick
时,它会立即应用。
var keyEl = document.getElementsByClassName("drumKey");
var x = document.getElementsByTagName("p");
for (i = 0; i < x.length; i++) {
x[i].addEventListener("click", colorChange(i));
}
function colorChange(i) {
keyEl[i].style.backgroundColor = "red";
}
这是因为addEventListener
需要function
作为第二个参数,并且您正在呼吁执行函数而不是返回函数。
请记住,功能是JavaScript中的对象。您可以返回这样的函数:
var keyEl = document.getElementsByClassName("drumKey");
var x = document.getElementsByTagName("p");
for (i = 0; i < x.length; i++) {
x[i].addEventListener("click", colorChange(i));
}
function colorChange(i) {
return function(){
keyEl[i].style.backgroundColor = "red";
}
}
<div class="drumKey">This is div 1</div>
<div class="drumKey">This is div 2</div>
<div class="drumKey">This is div 3</div>
<div class="drumKey">This is div 4</div>
<p>Click here to change the background color to red of Div 1</p>
<p>Click here to change the background color to red of Div 2</p>
<p>Click here to change the background color to red of Div 3</p>
<p>Click here to change the background color to red of Div 4</p>
所以,分配事件时要调用函数的错误,但是您需要返回它,如
x[i].addEventListener("click", (i) => colorChange(i));