网站搜索

javascript - 给子 div 添加悬停效果不起作用


我想为我的 parentDiv 中的所有子项添加一个鼠标悬停效果。但现在如果我把鼠标悬停在其中一个方块上时,不管我把鼠标放在哪个子项上,实际上总是最后一个 childDivs 的背景在变化。这是为什么?

for (let i = 0; i < Number(height); i++)
    {
        for (let j = 0; j < Number(width); j++)
        {                               
            var childDiv = document.createElement("div");
            childDiv.className = "childDiv";
            childDiv.style.backgroundColor = "#e6e6e6";
            childDiv.id = `${i};${j}`
            childDiv.onclick = () => childDiv.style.backgroundColor = "black";
            childDiv.onmouseenter = () => childDiv.style.background = "#cccccc";                
            childDiv.onmouseleave = () => childDiv.style.background = "#e6e6e6";
            parentDiv.appendChild(childDiv); 
        }           
    }

答案#1

将 var 改为 let:

let childDiv = document.createElement("div");

这里有一个工作示例。下面是关于 var 和 let 之间差异的更多信息(简而言之,var childDiv 在第一次迭代时创建一次(并且在 for 循环之外可见),在最后一次迭代时其值被设置为最后一个元素——每个箭头函数()=>{} 使用该 childDiv 及循环执行后的最后值;let childDiv 在每次迭代时“单独”创建(在 for 循环之外不可见)并传递给箭头函数)。