事件委托是一种利用事件冒泡机制,使父元素代替子元素去执行某些事件操作的技术。通过在父元素上绑定一个事件监听器,当子元素触发该事件时,事件会一直向上冒泡,最终被父元素捕获并执行。这可以避免在每个子元素上都绑定监听器,节省代码量和提高性能。
要使用事件委托,需要选择一个尽可能高的父元素,比如document或者body,然后在该元素上绑定事件监听器。接着,在回调函数中判断事件源(即触发事件的具体元素),根据不同的事件源执行相应的操作。
举个例子,假设我们要给一个ul列表的每个li元素绑定点击事件,如果直接在每个li元素上绑定,代码如下:
const lis = document.querySelectorAll('li');
for (let i = 0; i < lis.length; i++) {
lis[i].addEventListener('click', function() {
console.log('clicked');
});
}
但是,如果有很多li元素时,这种方式可能会导致性能问题。相反,我们可以在ul元素上绑定监听器,然后在回调函数中判断事件源是否为li元素,代码如下:
const ul = document.querySelector('ul');
ul.addEventListener('click', function(event) {
if (event.target.tagName === 'LI') {
console.log('clicked');
}
});
通过这种方式,只需要在ul元素上绑定一个事件监听器,就可以处理该ul列表下所有li元素的点击事件,无需在每个li元素上添加监听器,从而节省代码量和提高性能。