Định nghĩa
Event (sự kiện) là hành động xảy ra trên trang web: user click, load trang, nhấn phím, resize cửa sổ, submit form... JS phản ứng qua event handler.
Các loại sự kiện phổ biến
| Loại | Ví dụ |
|---|---|
| Mouse | click, dblclick, mousedown, mouseup, mousemove, mouseover, mouseout |
| Keyboard | keydown, keyup, keypress (deprecated) |
| Form | submit, change, input, focus, blur |
| Window/Document | load, DOMContentLoaded, resize, scroll, unload, beforeunload |
| Touch (Mobile) | touchstart, touchmove, touchend |
| Drag & Drop | dragstart, drag, drop, dragover |
Cách gán Event Handler
1. HTML attribute (cũ, không khuyến khích)
<button onclick="alert('Hi')">Click</button>
2. DOM Property (cũ)
btn.onclick = function() { alert('Hi'); };
// Chỉ 1 handler cho 1 event
3. addEventListener (chuẩn, khuyên dùng)
btn.addEventListener('click', function(e) {
alert('Hi');
});
// Nhiều handler cho 1 event, có options (capture, once, passive)
Event Object
Handler nhận tham số event (hoặc e) chứa thông tin:
e.type: loại event ('click')e.target: element trigger evente.currentTarget: element gán handlere.preventDefault(): chặn hành vi mặc định (link, submit)e.stopPropagation(): chặn bubblinge.clientX/Y,e.key, v.v.
Event Flow: Capturing → Target → Bubbling
// Capturing phase (trickle down)
document.addEventListener('click', handler, true);
// Bubbling phase (mặc định, bubble up)
element.addEventListener('click', handler); // hoặc false
Best practice
- Dùng
addEventListener. - Dùng
event delegation(gán cho parent, kiểm trae.target) cho danh sách động. - Remove listener khi không cần:
removeEventListener(cần tham chiếu cùng function). - Passive listeners cho scroll/touch:
{passive: true}.