Javascript 如何摆脱“TypeError:无法读取null的属性'style'”?

Javascript 如何摆脱“TypeError:无法读取null的属性'style'”?,javascript,vuejs2,Javascript,Vuejs2,我有一个vu.js app,还有一个按钮,中间有矢量图标。我想在单击该按钮时使其闪烁 代码如下所示: up (event) { event.currentTarget.style.background = 'blue' setTimeout(() => { event.currentTarget.style.background = '#fcfcfc' }, 100) }, 问题是,当我单击按钮时,它会以蓝色绘制,但不会使用setTimeout进行绘制 我做错了什么?

我有一个vu.js app,还有一个按钮,中间有矢量图标。我想在单击该按钮时使其闪烁

代码如下所示:

up (event) {
  event.currentTarget.style.background = 'blue'
  setTimeout(() => {
    event.currentTarget.style.background = '#fcfcfc'
  }, 100)
},
问题是,当我单击按钮时,它会以蓝色绘制,但不会使用setTimeout进行绘制


我做错了什么?

大多数DOM事件在树上传播。因此,一开始,它们会触发您期望的元素,例如,单击一个按钮,然后会为该元素的所有祖先触发相同的事件,一个接一个,逐渐向树上移动。所有这些事件都使用相同的事件对象,并且某些属性在向上传播时会发生更改

event.target是发生原始事件的元素

当事件向上传播DOM树时,event.currentTarget会反映传播中的当前元素。因此,它从与目标相同的起点开始,并逐渐上升到DOM树的顶部。在函数内部,它最初是您在其上注册侦听器的元素。当计时器启动时,它已经爬到树顶上了

解决方案是在您第一次遇到该元素时获取该元素的引用:

上升事件{ const el=event.currentTarget el.style.background='blue' 设置超时=>{ el.style.background='fcfc' }, 100 },
JS中的对象使用引用传递。我的假设是,event.currentTarget正在被一些代码更新。这引起了问题。更好的解决方案是使用CSS