关于事件委托

406 阅读1分钟

事件委托是利用事件冒泡,只指定一个事件处理程序,就可以管理某一类型的所有事件。

它的实质是把事件监听放在祖先元素(如父元素、爷爷元素)上。

引例一:给 100 个按钮添加点击事件

方法:监听这 100 个按钮的祖先,等冒泡时判断 target 是不是这 100 个按钮中的一个

<body>  
    <!-- div#div1>button{click $}*10 -->  
    <div id="div1">  
        <button>click 1</button>  
        <button>click 2</button>  
        <button>click 3</button>  
        <button>click 4</button>  
        <button>click 5</button>  
        <button>click 6</button>  
        <button>click 7</button>  
        <button>click 8</button>  
        <button>click 9</button>  
        <button>click 10</button>  
    </div> 
</body>
div1.addEventListener('click', (e) => {  
    const t = e.target  
    if(t.tagName.toLowerCase()==='button'){  
        console.log('button 被点击了')  
        console.log('button 被点击了' + t.textContent)   
    }
})

引例二:监听目前不存在的元素的点击事件

方法:监听祖先,等点击的时候判断是不是我想监听的元素

setTimeout(()=>{  
    const button = document.createElement('button')  
    button.textContent = 'click 1'  
    div1.appendChild(button)
},1000)  

div1.addEventListener('click',(e)=>{  
    const t = e.target  
    if(t.tagName.toLowerCase() === 'button'){  
        console.log('button click')     
    }   
})

事件委托优点:

  • 节约监听数量,减少内存消耗
  • 可用于监听动态生成的元素

本文参考摘录了

  1. 简述 DOM 事件机制与事件委托
  2. 简述事件委托(事件代理)