父元素绑定click,子元素在不绑定click的情况下如何避免触发父元素click?

HTML:

<div id="container">
  <div id="inner">

  </div>
</div>

JS:

document.getElementById('container').addEventListener('click',function () {
  document.getElementById('inner').style.display = "none";
});

这时我点击子元素,也会消失。该如何避免这种情况呢?我不想也让子元素绑定click事件的方法。

阅读 5.9k
5 个回答

https://jsfiddle.net/g5u7qrrd/6/

document.getElementById('container')
    .addEventListener('click',function (e) {
        if (e.target.id !== 'inner')
            document.getElementById('inner').style.display = "none";
    });
document.getElementById('container').addEventListener('click',function (e) {
  document.getElementById('inner').style.display = "none";
  e.stopPropagation();
}, true);
  1. addEventListener 传递第三个参数 true。使用事件捕获。

  2. e.stopPropagation() 阻止事件传播。

给子元素style加个pointer-events: none;直接忽略鼠标事件。IE可能需要处理下兼容。

e.stopPropagation();

二楼正解!!

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题