javascript - onmouseover方法动态分配

标签 javascript

我正在尝试从 CMS 创建一组元素。我在这里用一组在 Javascript 中生成的矩形重现了这个问题。我怎样才能为它们中的每一个动态添加一个“onmouseover”方法,改变悬停 block 的颜色?

for (i = 0; i < 5; i++) {
  var coloured_div = document.createElement("div");
  coloured_div.className = "col_div_class";
  coloured_div.id = "coloured_div" + i;
  document.getElementById("body").appendChild(coloured_div);

  coloured_div.addEventListener("mouseover", hoverCube);
}

function hoverCube(i) {
  document.getElementById("coloured_div" + i).style.backgroundColor = "orange";
}
.col_div_class {
  width: 250px;
  height: 250px;
  background-color: yellow;
  border: solid white 5px;
}
<body id="body">
</body>

最佳答案

当您将 hoverCube 作为回调传递给您的事件监听器时,它会自动传递一个包含事件信息的对象 (e)。从这些信息中,您可以通过执行 (e.target) 获取触发事件的元素,然后您可以设置其样式:

for (var i = 0; i < 5; i++) {
  var coloured_div = document.createElement("div");
  coloured_div.className = "col_div_class";
  coloured_div.id = "coloured_div" + i;
  document.getElementById("body").appendChild(coloured_div);

  coloured_div.addEventListener("mouseover", hoverCube);
}

function hoverCube(e) {
  e.target.style.backgroundColor = "orange";
}
.col_div_class {
  width: 250px;
  height: 250px;
  background-color: yellow;
  border: solid white 5px;
}
<body id="body">
</body>

或者,为了实现您在代码中尝试做的事情,您需要将 i 作为参数传递给 hoverCube,然后它就可以访问正确的元素:

for (var i = 0; i < 5; i++) {
  var coloured_div = document.createElement("div");
  coloured_div.className = "col_div_class";
  coloured_div.id = "coloured_div" + i;
  document.getElementById("body").appendChild(coloured_div);

  coloured_div.addEventListener("mouseover", (function(i) { // ES5 closure (if using ES6 you can simply change var i to let i in the for loop)
      return function() {
        hoverCube(i);
      };
    })(i)
)}

function hoverCube(i) {
  document.getElementById("coloured_div" + i).style.backgroundColor = "orange";
}
.col_div_class {
  width: 250px;
  height: 250px;
  background-color: yellow;
  border: solid white 5px;
}
<body id="body">
</body>

关于javascript - onmouseover方法动态分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58115428/

相关文章:

javascript - 如何 trim 斜线之间的字符串?

javascript - 对象数组的算术运算 - JavaScript

javascript - 在父级内部移动具有相同类的多个 div

javascript - md-dialog 中的 Angular-Material md-select

javascript - 如何使用JS在特定列之前添加列

javascript - 单击动态生成的图像时触发事件

javascript字符串将<替换为<

javascript - SpiderMonkey:如何从 c 获取当前 JSObject 的名称?

javascript - 在 Puppeteer 中获取选择器的值

javascript - Angular 异步调用