javascript - 循环内的 addEventListener 未定义 div 元素

标签 javascript dom addeventlistener

这是 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] .另一种方法是实例化 i使用 letlet i = 0 ,则可以访问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>

关于javascript - 循环内的 addEventListener 未定义 div 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66811836/

相关文章:

javascript - 如何计算传单中的像素

javascript - 在 Google map 上添加点击标记以计算到标记的距离

javascript - 如何创建逆向 react 门户

JavaScript 函数/事件监听器无法正常运行

javascript - Vaadin JavaScript 卸载事件监听器未触发

javascript - 从不同的模块和 Controller 获取 Angular 变量

javascript - 如何获得一个简单的 jQuery 代码来替换我当前的 Javascript

javascript - JQuery,检索子孙

asp.net - 为什么 document.getElementById ('hyperlink_element_id' ) 返回超链接的 href 属性的值?

javascript - 同步滚动 2 div 时 addEventListener 在 firefox 中不起作用