xccjk / x-blog

学习笔记
18 stars 2 forks source link

浅谈JavaScript事件捕获事件冒泡与事件委托 #53

Closed xccjk closed 2 years ago

xccjk commented 3 years ago

在这里插入图片描述

事件捕获

事件冒泡

<div id='app'>
  <h2>事件捕获</h2>
  <div id="item1">
    第一层
    <div id="item2">
      第二层
      <div id="item3">
        第三层
      </div>
    </div>
  </div>
</div>
<script>
  function handleClick1(){
    console.log('第一层')
  }
  function handleClick2(){
    console.log('第二层')
  }
  function handleClick3(){
    console.log('第三层')
  }
  const isCapture = false
  // isCapture为false时,为事件冒泡
  // 打印 第三层 -> 第二层 -> 第一层
  // isCapture为true时,为事件捕获
  // 打印 第一层 -> 第二层 -> 第三层
  document.getElementById('item1').addEventListener('click', handleClick1, isCapture)
  document.getElementById('item2').addEventListener('click', handleClick2, isCapture)
  document.getElementById('item3').addEventListener('click', handleClick3, isCapture)
</script>

事件代理

实际应用

<ul id="list">
  <li>item 1</li>
  <li>item 2</li>
  <li>item 3</li>
  ......
  <li>item n</li>
</ul>
// 给父层元素绑定事件
document.getElementById('list').addEventListener('click', function (e) {
  // 兼容性处理
  var event = e || window.event;
  var target = event.target || event.srcElement;
  // 判断是否匹配目标元素
  if (target.nodeName.toLocaleLowerCase === 'li') {
    console.log('the content is: ', target.innerHTML);
  }
})