【发布时间】:2020-10-27 02:31:56
【问题描述】:
我有许多名为 infoopts 的元素,它们只是一个 html i 标签,我在点击时附加了一个事件侦听器,以便我可以更改它们的样式(背景颜色)。当我点击一个按钮时,这些是动态生成的。我已经尝试了一百万件事,但由于某种原因,它们都不会触发点击事件。 这是我尝试过的:
useEffect(() => {
const infoopts = document.querySelectorAll('.infoopts')
infoopts.forEach(el => {
el.addEventListener('click', function(e) {
console.log('clicked') //never logs this
el.style.background = 'red'
})
})
},[])
控制台甚至没有记录点击事件。这应该是一个业余问题。为什么不创建点击事件?
我不使用 React 的 2 个原因:
- 我还想为其相邻元素设置样式,onClick 只会设置该元素的样式
- 如果我使用状态,它将更改我所有具有 infoopts 类的元素,我只想设置被点击的元素及其邻居的样式(状态是全局的)
【问题讨论】:
-
您是否有理由不使用 react 为您执行此操作?我认为安装组件时
.infoopts不会存在,因此您的querySelectorAll什么也找不到。 -
我刚刚做了。这就是为什么我使用香草来做到这一点。但是香草不起作用
-
您的问题有点难以想象,请在代码沙箱或 github 存储库中提供可重现的示例
-
您可以在谷歌搜索的任何反应待办事项列表示例中找到如何跟踪所选项目的示例,它基本上只是在父组件中有一个项目数组,在这种情况下是一个数组infoopts 元素
-
是的,这听起来绝对像一个待办事项列表
标签: javascript reactjs events