【问题标题】:How could I add Eventlisteners for each div so it's not undefined? (javascript, more below)如何为每个 div 添加 Eventlisteners 使其不是未定义的? (JavaScript,更多下文)
【发布时间】:2021-06-20 14:45:43
【问题描述】:

我不明白为什么它说是undefined

错误信息:

dom.js:51 Uncaught TypeError: Cannot set property 'backGroundcolor' of undefined 在 HTMLDivElement。 (dom.js:51)

有问题的行:pixels.style.backGroundcolor = 'black';

let drawBtn = document.querySelector('#letsDraw')
drawBtn.onclick = clearAndDraw

function clearAndDraw() {
  clear()
  draw()
}

function draw() {
  screenSize = textbox.value
  for (i = 0; i < screenSize ** 2; i++) {
    pixel = document.createElement('div');
    pixel.classList.add('pixel');
    pixel.style.border = '1px solid black';
    pixel.style.backgroundColor = 'white';
    screen.appendChild(pixel);
  }
  screen.style.gridTemplateColumns = `repeat(${screenSize}, auto) `;
  screen.style.gridTemplateRows = `repeat(${screenSize}, auto) `;

  const pixels = document.querySelectorAll('.pixel')
  pixels.forEach(pxl => {
    pxl.addEventListener('mouseenter', function() {
      pixels.style.backGroundcolor = 'black';
    })
  })
}
<div class=screen>
</div>

【问题讨论】:

  • pxl.style.backgroundColor 而不是第二个循环中的pixels.style.backGroundcolor
  • 旁白:你需要在 HTML 中引用你的类名吗?
  • 还有backGroundcolor -> backgroundColor
  • @silversunhunter 如果您只使用 one 类名,则不在 HTML5 中。仅当您要添加两个时:class="screen foo" - 否则 class=screen 绝对有效
  • 为什么在创建 div 时不添加事件处理程序?您创建所有 div 并将它们全部备份以添加通风处理程序似乎很奇怪。

标签: javascript html css dom project


【解决方案1】:

您的目标是像素列表,而不是元素本身。因此,如果您的 forEach 使用 'pxl' 作为每个元素的变量,则必须更改此行。

编辑: 另一件事是您的样式属性的拼写错误。将“背景颜色”更改为“背景颜色”

pixels.style.backGroundcolor = 'black';

到这里

pxl.style.backgroundColor = 'black';

【讨论】:

  • 非常感谢,我之前已经尝试过,但可能由于其他原因没有成功,现在可以开始了
  • 是的@RokoC.Buljan。完全同意。我在编辑时打错了。现在是正确的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-02-06
  • 1970-01-01
  • 2023-04-07
  • 2023-04-08
  • 2021-09-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多