这是HTML和JS代码:
let sides = document.getElementsByClassName("sides");
for (var i=0;i<sides.length;i++){
console.log(sides[i].innerHTML); // top left
sides[i].addEventListener("click", function(){
console.log(sides[i]); //Undefined
})
}
<div class="sides">top</div>
<div class="sides">left</div>
当我console.log(sides[i])
时,我得到div元素,但当我添加addEventListener
时,它显示undefined
。
请有人帮忙。
将sides[i]
更改为this
,以便它可以引用单击的元素本身。解决方案不起作用的原因是,由于i++
,变量i
在最后一次迭代后增加到2。因此,当事件侦听器被触发时,sides[i]
现在就是sides[2]
。另一种方法是使用let
作为let i = 0
实例化i
,然后可以访问sides[i]
<div class="sides">top</div>
<div class="sides">left</div>
<script>
let sides = document.getElementsByClassName("sides");
for (let i=0;i<sides.length;i++){
console.log(sides[i].innerHTML); // top left
sides[i].addEventListener("click", function(){
console.log(this);
console.log(sides[i])
})
}
</script>
您也可以控制台.loge.target
<div class="sides">Top</div>
<div class="sides">Left</div>
<script>
let sides = document.getElementsByClassName("sides");
for (let i=0;i<sides.length;i++){
console.log(sides[i].innerHTML); // top left
sides[i].addEventListener("click", function(e) {
console.log(e.target);
})
}
</script>
您也可以像下面这样为元素分配一个onclick()
方法,但在函数内部,您仍然可以引用带有this
的元素,以便console.log()
知道您要打印哪个元素的innerHTML
。在这种情况下,它是自己的。
let sides = document.getElementsByClassName("sides");
for (var i=0; i<sides.length; i++) {
console.log(sides[i].innerHTML); // top left
sides[i].onclick = function() {
console.log(this.innerHTML); // Not undefined
};
}
<div class="sides">top</div>
<div class="sides">left</div>
或者,您也可以创建一个函数来处理点击事件,在这种情况下,您将再次使用this
来引用点击的元素:
function someFunc() {
console.log(this.innerHTML); // Not undefined
}
let sides = document.getElementsByClassName("sides");
for (var i=0; i<sides.length; i++) {
console.log(sides[i].innerHTML); // top left
sides[i].addEventListener("click", someFunc);
}
<div class="sides">top</div>
<div class="sides">left</div>