Events ও Event Handling

লেসন ৩৩ / ৪৪

Event কী?

Event হলো ব্যবহারকারী বা browser এর ঘটনা — click, hover, key press, page load ইত্যাদি।

Event Listener যোগ করা

// সেরা পদ্ধতি: addEventListener ⭐
let btn = document.getElementById("myBtn");

btn.addEventListener("click", function(event) {
    console.log("Button clicked!");
    console.log(event);  // event object
});

// Arrow function
btn.addEventListener("click", (e) => {
    console.log(e.target);  // কোন element-এ click হয়েছে
});

// পুরনো পদ্ধতি (এড়িয়ে চলুন)
btn.onclick = function() { ... };
<button onclick="myFunc()">...</button>

Common Events

// Mouse
element.addEventListener("click", fn);
element.addEventListener("dblclick", fn);
element.addEventListener("mouseover", fn);
element.addEventListener("mouseout", fn);
element.addEventListener("mousemove", fn);

// Keyboard
document.addEventListener("keydown", (e) => {
    console.log(e.key);       // "a", "Enter", "ArrowUp"
    console.log(e.code);       // "KeyA"
    if (e.key === "Escape") closeModal();
});

// Form
form.addEventListener("submit", (e) => {
    e.preventDefault();  // default submit বন্ধ
    // validation/AJAX
});

input.addEventListener("input", (e) => {
    console.log(e.target.value);
});

input.addEventListener("change", fn);
input.addEventListener("focus", fn);
input.addEventListener("blur", fn);

// Window/Document
window.addEventListener("load", fn);
window.addEventListener("scroll", fn);
window.addEventListener("resize", fn);

document.addEventListener("DOMContentLoaded", () => {
    // HTML লোড শেষ, images অপেক্ষা করে না
});

Event Object (বিস্তারিত)

btn.addEventListener("click", function(e) {
    e.target          // কোন element-এ click হয়েছে
    e.currentTarget   // যে element-এ listener লাগানো
    e.type            // "click"
    e.clientX, e.clientY  // mouse position

    e.preventDefault();   // default বন্ধ (form submit, link)
    e.stopPropagation();  // bubble বন্ধ
});

Event Delegation (পারফরমেন্স)

// ১০০টি li থাকলে প্রত্যেকটাতে listener না লাগিয়ে parent-এ একটি
document.querySelector("ul").addEventListener("click", (e) => {
    if (e.target.tagName === "LI") {
        console.log("Clicked:", e.target.textContent);
    }
});

বাস্তব উদাহরণ: Todo App

const input = document.getElementById("taskInput");
const btn = document.getElementById("addBtn");
const list = document.getElementById("taskList");

btn.addEventListener("click", () => {
    const text = input.value.trim();
    if (!text) return;

    const li = document.createElement("li");
    li.textContent = text;
    li.addEventListener("click", () => li.remove());
    list.appendChild(li);
    input.value = "";
});

input.addEventListener("keydown", (e) => {
    if (e.key === "Enter") btn.click();
});