我有一个ul元素,其中有三个li子元素,而ul ele具有一个useCapture事件处理程序以供单击。在click事件处理程序中,我通过以下方式停止了该事件:event.stopPropagation(),只要一切都能按预期完成,就可以了:单击ul / li时,该事件将停止。

但是,当我通过css :: after为ul添加一个伪元素时,对于此子伪元素来说,情况并不理想,当我单击该伪元素时,click事件并未停止,并且在Chrome的调试器面板中,我检查了伪元素的事件侦听器与li元素完全相同。

这是我的主要代码:



document.querySelector('#ul').addEventListener(
  'click',
  e => {
    console.log('clicked')
  },
  false
)
document.querySelector('#ul').addEventListener(
  'click',
  e => {
    e.stopPropagation()
  },
  true
)

#ul::after {
  content: 'child';
  width: 100%;
  height: 20px;
  border: 1px solid red;
}

<ul class="list" id="ul">
  <li class="item">foo</li>
  <li class="item">bar</li>
  <li class="item">baz</li>
</ul>

最佳答案

因为伪元素不是真实的DOM,所以事件会注册到真实的DOM,这就是它不起作用的原因。

关于javascript - event.stopPropagation对伪元素不起作用吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55206185/

10-16 21:57