Một sự kiện DOM lan theo 3 pha: capturing (từ document đi xuống target) → target → bubbling (từ target đi ngược lên). Mặc định addEventListener nghe ở pha bubbling; truyền { capture: true } để nghe ở pha capturing.
event.target= phần tử thực sự bị tác động;event.currentTarget= phần tử đang gắn listener.stopPropagation()chặn lan tiếp;preventDefault()chặn hành vi mặc định (2 việc khác nhau).
Event delegation: thay vì gắn listener cho từng phần tử con, gắn một listener ở phần tử cha và dựa vào bubbling để bắt sự kiện, rồi phân nhánh theo event.target. Lợi ích:
- Ít listener → tốn ít bộ nhớ.
- Tự động áp dụng cho phần tử con thêm động sau này.
Hay dùng cho danh sách dài, bảng, menu.