事件委托(Event Delegation)是JavaScript中一种重要的事件处理模式,它利用事件冒泡机制,将子元素的事件处理委托给父元素统一管理。
事件委托的核心思想是:
document.getElementById('parent').addEventListener('click', function(event) {
// 检查事件源是否是我们要处理的元素
if (event.target.matches('li.child')) {
// 处理事件
console.log('子元素被点击:', event.target.textContent);
}
});
document.getElementById('parent').addEventListener('click', function(event) {
let target = event.target;
// 向上查找匹配的元素
while (target !== this) {
if (target.matches('li.child')) {
// 找到匹配的元素,处理事件
console.log('子元素被点击:', target.textContent);
break;
}
target = target.parentNode;
}
});
<ul id="todo-list">
<li>任务1 <button class="delete">删除</button></li>
<li>任务2 <button class="delete">删除</button></li>
<li>任务3 <button class="delete">删除</button></li>
</ul>
document.getElementById('todo-list').addEventListener('click', function(event) {
if (event.target.classList.contains('delete')) {
const listItem = event.target.closest('li');
listItem.remove();
}
});
// 添加新项目也会自动拥有删除功能
function addNewItem(text) {
const li = document.createElement('li');
li.innerHTML = `${text} <button class="delete">删除</button>`;
document.getElementById('todo-list').appendChild(li);
}
event.target获取最初触发事件的元素event.currentTarget获取绑定事件的元素event.stopPropagation(),但谨慎使用事件委托是前端开发中优化事件处理的强大技术,特别适合处理大量相似元素或动态内容的情况。
热门推荐:
0