javascript - 在 for 循环中添加事件监听器

标签 javascript dom

myDiv = document.getElementById('results');

div = myDiv.getElementsByTagName('div');


for (var i = 0; i < div.length; i++) {
    var division;
    division = div[i];

    // console.log(div[i]);

    division.addEventListener('mouseover', function () {
        division.style.fontWeight = "bold";
        division.style.background = "rgba(0, 7, 255, 0.29)";
    }, false);

    division.addEventListener('mouseout', function () {
        division.style.fontWeight = "";
        division.style.background = "";

    }, false);

这是 html 代码:

<div id="results">
    <div>Resulat 1</div>
    <div>Resulat 2</div>

</div>

当鼠标指针悬停在某些文本上时,我的脚本会加粗并在某些文本上添加背景,仅适用于第二个元素。( <div>Resulat 2</div> )

有人可以告诉我为什么吗,因为我所做的一切都适合我,即使我是一个 JS 初学者。

最佳答案

你的function()中的division是什么?它与您在每次迭代中在 division = div[i]; 处更改的 division 相同。 for 循环完成后,divisiondiv[1]。这就是为什么您只更改第二个 div 的原因。

您可以使用闭包来解决此问题,或者使用 this 访问关联对象:

division.addEventListener('mouseover', function () {
    this.style.fontWeight = "bold";
    this.style.background = "rgba(0, 7, 255, 0.29)";
}, false);

division.addEventListener('mouseout', function () {
    this.style.fontWeight = "";
    this.style.background = "";
}, false);

但是,使用 CSS 可以轻松实现您想要的效果:

#results > div:hover{
    font-weight:bold;
    background-color:rgba(0,7,255,0.29);
}

关于javascript - 在 for 循环中添加事件监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13344061/

相关文章:

javascript - 当一个输入与另一个输入的 ID 具有相同名称时的含义

javascript - Plotly x轴悬停文本问题

javascript - 单击 JavaScript 更改按钮颜色

javascript - 如何一次将脚本中的所有表行插入数据库

javascript - 当元素滚动到视口(viewport)时激活 CSS 3d 变换

javascript - 在开发工具中检查之前无法选择元素

javascript - jQuery 的 attr() 转义符号

php - 构建 Canvas RGB 值的 2D 数组

javascript - Chrome 为自定义 HTML 元素的 offsetWidth 返回 0

javascript - 设置 .innerHTML