JavaScript 知识量:26 - 101 - 483
事件委托是一种利用事件冒泡的特性,在父节点上响应事件,而不是在子节点上响应事件的技术。它能够改善性能,因为不需要对每个特定的节点添加事件监听器。
在事件委托中,可以将需要的事件处理程序添加到父元素上,然后利用事件冒泡的特性,将子元素的事件委托给父元素。当子元素的事件被触发时,会通过冒泡传递到父元素,然后在父元素上触发相应的事件处理程序。
例如,如果有多个子元素需要添加相同的点击事件处理程序,使用事件委托可以将这个处理程序添加到它们的父元素上。当点击事件在任何一个子元素上触发时,都会通过冒泡传递到父元素,并触发相应的处理程序。这样可以避免对每个子元素单独添加事件监听器,减少代码的复杂性和维护成本。
以下是一个事件委托的示例:
// 获取父元素 let parent = document.getElementById('parent'); // 添加事件处理程序 parent.addEventListener('click', function(event) { // 检查事件源是否为子元素 if (event.target.tagName.toLowerCase() === 'li') { // 执行相应的处理程序 console.log('子元素被点击:', event.target.textContent); } });
在这个示例中,父元素包含多个子元素,每个子元素都是一个列表项(li)。通过在父元素上添加一个click事件监听器,可以利用事件冒泡的特性,将子元素的点击事件委托给父元素。当点击事件在任何一个子元素上触发时,都会通过冒泡传递到父元素,并触发相应的事件处理程序。在事件处理程序中,检查事件源是否为子元素,如果是,就执行相应的处理程序。
取消事件委托可以通过删除事件委托的程序实现。如果想删除事件处理程序,可以使用removeEventListener方法。这个方法需要传入两个参数,第一个参数是事件的名称,第二个参数是事件处理程序函数。下面是一个简单的示例:
// 获取父元素和子元素 let parent = document.getElementById('parent'); let child = document.getElementById('child'); // 添加事件委托处理程序 parent.addEventListener('click', function(event) { // 检查事件源是否为子元素 if (event.target.id === child.id) { // 执行相应的处理程序 console.log('子元素被点击'); } }); // 取消事件委托处理程序 parent.removeEventListener('click', function(event) { // 检查事件源是否为子元素 if (event.target.id === child.id) { // 执行相应的处理程序 console.log('子元素被点击'); } });
在上面的示例中,首先获取了一个父元素和子元素,并在父元素上添加了一个click事件监听器。然后,使用事件委托的特性,在事件处理程序中检查事件源是否为子元素,如果是,就执行相应的处理程序。接下来,使用removeEventListener方法删除了这个事件处理程序,从而取消了事件委托。注意,需要传入与添加事件处理程序时相同的事件名称和处理程序函数。
Copyright © 2017-Now pnotes.cn. All Rights Reserved.
编程学习笔记 保留所有权利
MARK:3.0.0.20240214.P35
From 2017.2.6