© 2026 Laravel

Event Delegation: Tối ưu hàng ngàn sự kiện

2 phút đọc 11 lượt xem
#javascript #events #performance #dom

Mục lục bài viết

Sử dụng các mục để điều hướng nhanh

#1. Bài toán

Bạn có danh sách 1.000 sản phẩm trong một bảng. Đừng gắn addEventListener cho mỗi sản phẩm (hỏng RAM và gây chậm trình duyệt).

#2. Giải pháp: Event Delegation

Tận dụng cơ chế Event Bubbling (sự kiện nổi lên): Gắn 1 listener duy nhất vào thẻ cha (table hoặc ul). Khi người dùng click vào thẻ con (td, li), sự kiện sẽ “nổi” lên tới cha.

#3. Code mẫu

document.querySelector('ul').addEventListener('click', (e) => {
    if (e.target.tagName === 'LI') {
        console.log('Clicked item:', e.target.textContent);
    }
});

#4. Quizz Senior

Q: Sự khác biệt giữa event.targetevent.currentTarget? A: event.target là phần tử thực sự bị click (thẻ con). event.currentTarget là phần tử đang gắn listener (thẻ cha). Khi làm delegation, phải dùng event.target. Q: Lợi ích chính? A: Tiết kiệm RAM (1 listener thay vì 1000) và tự động xử lý được cả những phần tử thêm mới vào sau này (không cần gắn lại sự kiện).

Bài viết liên quan