You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

循环生成的div无法通过JavaScript事件修改背景颜色求助

循环生成元素点击变色失效的问题修复

问题出在哪

你代码里的变量p是循环内部声明的,循环跑完之后,p只会指向最后一个生成的.pixel元素。所以不管你点哪个div,实际修改的都是最后那个元素的背景色,而不是你点击的那个。控制台能输出说明事件监听是好的,只是改错了对象。

修复后的代码

把修改背景色的那行代码里的p换成event.target就行,直接用事件对象拿到你点击的那个元素:

const main = document.getElementById('divmain');
let parent = document.querySelector('#parent');

for (let i = 1; i <= 9; i++) {
  let p = document.createElement('div');
  p.classList.add("pixel");
  parent.appendChild(p);
  p.textContent = 'Hello World!';
  p.style.color = 'blue';
}

document.addEventListener('click', function (event) {
  if (!event.target.matches('.pixel')) return;
  console.log("Hello World");
  // 用event.target获取当前点击的元素
  event.target.style.backgroundColor = "yellow";
}, false);

为啥这样改

event.target是事件对象自带的属性,它永远指向触发当前事件的那个具体DOM元素——也就是你点击的那个.pixel div。而你之前用的p是循环变量,循环结束后它的引用就固定在最后一次循环创建的元素上了,自然没法对应到你点击的任意一个元素。

内容的提问来源于stack exchange,提问作者Lautaro Ezequiel Coppa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 06:09:56