في هذا الدرس ستتعلم كيف تتفاعل JavaScript مع المستخدم عبر الأحداث (Events)

5:00 دقائق مجاني
تعلّم JavaScript من الصفر… وخلّ صفحاتك تتحرك وتتفاعل مع المستخدم بشكل احترافي

الأحداث (Events) هي ما يجعل الصفحة “حية”. عند ضغط زر، كتابة نص، إرسال نموذج، أو حتى تحريك الفأرة — كل ذلك أحداث يمكن لـ JavaScript الاستماع لها والتصرف بناءً عليها.

ما هو الحدث؟

الحدث هو شيء يحدث في الصفحة (click، input، submit…)، ونحن نربط له “مستمع” (Listener) لينفّذ كودًا عند وقوعه.

addEventListener (الطريقة الصحيحة)

HTML:



JavaScript:


let btn = document.getElementById("btn");

btn.addEventListener("click", function () {
  alert("تم الضغط!");
});

هذه الطريقة أفضل من onClick داخل HTML.

حدث click


let box = document.getElementById("box");

box.addEventListener("click", function () {
  box.classList.toggle("hidden");
});

عند كل ضغطة يتم إظهار/إخفاء العنصر.

حدث input (الكتابة داخل الحقول)

HTML:



JavaScript:


let input = document.getElementById("name");
let result = document.getElementById("result");

input.addEventListener("input", function () {
  result.textContent = "مرحبًا " + input.value;
});

يتحدّث النص مباشرة أثناء الكتابة.

حدث submit (النماذج)

HTML:


JavaScript:


let form = document.getElementById("myForm");

form.addEventListener("submit", function (event) {
  event.preventDefault(); // منع إعادة تحميل الصفحة
  alert("تم إرسال النموذج");
});

بدون preventDefault() ستُعاد تحميل الصفحة.

حدث keydown (لوحة المفاتيح)


document.addEventListener("keydown", function (event) {
  console.log(event.key);
});

مفيد للاختصارات (مثل الألعاب أو البحث).

كائن الحدث (event)


btn.addEventListener("click", function (event) {
  console.log(event.target);
});

event.target هو العنصر الذي حدث عليه الحدث.

أخطاء شائعة مع Events

  • استخدام onClick داخل HTML
  • نسيان preventDefault في submit
  • كتابة الكود قبل تحميل الصفحة
  • الخلط بين click و input

تمارين للتطبيق

  1. زر يغيّر لون عنصر عند الضغط.
  2. حقل نص يعرض عدد الأحرف أثناء الكتابة.
  3. نموذج يمنع الإرسال إذا كان الحقل فارغًا.

من واقع عملي: التفكير بعقلية الأحداث

الأحداث هي ما يجعل صفحتك حيّة تتجاوب مع المستخدم. ومن خبرتي، أهم تحوّل ذهني للمبتدئ هنا هو الانتقال من "الكود ينفّذ بالترتيب" إلى "الكود ينتظر حدوث شيء ثم يتفاعل". أنت لا تعرف متى سيضغط المستخدم الزر، فتربط له مستمعًا ينفّذ عند الضغط.

نصيحتي القاطعة: استخدم addEventListener دائمًا لربط الأحداث، وتجنّب كتابة onclick داخل وسم HTML — فالفصل بين الهيكل والمنطق أنظف وأكثر مرونة. وأبسط قاعدة تعلّمتها: في النماذج، لا تنسَ preventDefault داخل حدث submit، وإلا أعاد المتصفح تحميل الصفحة وضاع عملك. هذه التفاصيل الصغيرة تفرّق بين كود يعمل وكود يحبط المستخدم.

مفهوم متقدّم يستحق المعرفة: تفويض الأحداث

لن نتعمّق فيه الآن، لكن من المفيد أن تعرف بوجوده مبكرًا. تخيّل قائمة فيها مئة زر حذف. بدل ربط مستمع لكل زر (وهو مرهق وبطيء)، يمكنك ربط مستمع واحد على القائمة كلها يتعرّف على الزر الذي ضُغط. هذا يسمّى تفويض الأحداث.

أستخدم هذا الأسلوب كثيرًا في القوائم التي تتغيّر عناصرها باستمرار، لأنه يعمل حتى مع العناصر المُضافة لاحقًا. لا تقلق إن لم يتّضح تمامًا الآن — فقط احفظ الفكرة، وستقدّرها حين تبني واجهات أكبر. ذكرتها لأنها من أكثر ما يميّز كود المحترفين عن المبتدئين.

ماذا بعد هذا الدرس؟

الدرس القادم: بناء مشروع صغير (To-Do List)

سنجمع DOM + Events + Arrays في تطبيق حقيقي.