《事件委托》

140 阅读1分钟
什么叫事件委托

它还有一个名字叫事件代理,事件委托就是利用事件冒泡,只指定一个事件处理程序,就可以管理某一类型的所有事件。(简单点就是自己的事你委托给别人让别人干了,这时候碰巧另一个朋友也是去办理这个事,同样也可以让这个你委托办事的人帮另一个朋友也一起办了。)


这样做的优点好处

  • 省监听数(减少内存使用)
  • 可以监听动态元素

比如以下代码

<div id="x">
  <button></button>
  <button>giao</button>
  <button></button>
  <button></button>
  <button>giao</button>
  <button>giao~</button>
</div>

这里要是给每一个button都加一个点击事件

x.addEventListener('click',(e)=>{
 const t = e.target
 if(t.targetName.toLowerCase() === 'button'){
  console.log('button 被点击了')
  }
 })

封装事件委托
on ('click','#div','button', ()=>{
 console.log('button, 被点击了')
})

function(element, eventType, selector, fn) {
 if (!(element instanceof Element)){
 element = document.querySelector(element)
}
element.addEventListener(eventType, e => {
  let el = e.target
  while (!el.matches(selector)) {
    if (element === el) {
      el = null
      break
    }
    el = el.parentNode
  }
  el && fn.call(el, e, el)
})
return element
},
学习记录,有错误请指正