事件委托也称事件代理,在jQuery里面就称为事件委派。
事件委托就是把事件监听放在祖先元素(如父元素、爷爷元素)上。
由于事件会在冒泡阶段向上传播到父节点,因此可以把子节点的监听函数定义在父节点上,由父节点的监听函数统一处理多个子元素的事件。这种方法叫做事件的代理。
事件委托的原理
不是给每个子节点单独设置事件监听器,而是事件监听器设置在其父节点上,然后利事件用冒泡的原理影响设置每个子节点
事件委托作用
绑定事件越多,浏览器内存占用越大,严重影响性能
只操作一次DOM,提高程序的性能
假设有一个列表,列表之中有100个列表项,我们需要在点击每个列表项的时候响应一个事件。以前的做法就是利用for循环给每个列表项添加点击事件,这样对于内存的消耗非常大,性能差。因此借助事件代理,提高程序性能。
<ul>
<li>dianwo1</li>
<li>dianwo2</li>
<li>dianwo3</li>
...
<li>dianwo100</li>
</ul>
借助事件代理的方法:不需要再每个li项里面添加点击事件,只需要给父容器ul绑定方法即可,不管点击哪个li项,都会根据冒泡传播的传递机制,触发点击事件,执行对应的处理方法,根据事件源e.target,我们可以知道点击的是谁,从而完成不同的事。
事件委托实现
<ul>
<li>dianwo</li>
<li>dianwo</li>
<li>dianwo</li>
<li>dianwo</li>
<li>dianwo</li>
</ul>
let ul=document.querySelector('ul')
ul.addEventListener('click',function(e){
e.target.style.color='pink'
//e.target 得到点击的那个对象
})
target 与 currentTarget 的区别:
以上代码中,并没有给每一个元素绑定事件,只是给父节点ul绑定事件,但是点击每一个li时,可以变换其样式。
事件委托的优点:
1.减少事件注册,节省内存。
2.可以监听动态生成的元素。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。