نوفيل
الرئيسيةالكورساتالتحديات⚔️ المبارزاتالمقالاتالأدواتتغريداتالمجتمع
دخولابدأ مجاناً
الرئيسيةالكورساتالتحديات⚔️ المبارزاتالمقالاتالأدواتتغريداتالمجتمع
نوفيل

منصة تعليم البرمجة الأولى بالعربي. تعلم من الصفر حتى الاحتراف مع كورسات احترافية وتحديات ذكاء اصطناعي.

المنصة

  • الكورسات
  • التحديات
  • المقالات
  • الأدوات

الحساب

  • إنشاء حساب
  • تسجيل الدخول
  • لوحة التحكم
  • الملف الشخصي

روابط

  • سياسة الخصوصية
  • شروط الاستخدام
  • عن نوفيل
  • تواصل معنا

© 2026 نوفيل. جميع الحقوق محفوظة.

صُنع بـ في مصر

نوفيل
الرئيسيةالكورساتالتحديات⚔️ المبارزاتالمقالاتالأدواتتغريداتالمجتمع
دخولابدأ مجاناً
الرئيسيةالكورساتالتحديات⚔️ المبارزاتالمقالاتالأدواتتغريداتالمجتمع
JS

منهج JavaScript

دليل مرجعي شامل

كل اللغات
مدرسة البرمجة/منهج JavaScript/التعامل مع الأحداث (Event Listeners)

التعامل مع الأحداث (Event Listeners)

addEventListener javascriptالاحداث في جافاسكريبتevent delegationpreventDefaultevent bubbling

جدول مرجعي سريع

1
الحدثيحدث عند
clickالضغط على عنصر
inputتغيير قيمة حقل نص فوراً
submitإرسال نموذج
keydown / keyupالضغط/الرفع عن مفتاح
loadاكتمال تحميل الصفحة أو مورد

الشرح

الأحداث (Events) هي إشارات يُطلقها المتصفح عند حدوث شيء معين — ضغطة زر، تمرير الفأرة، إرسال نموذج، تحميل صفحة، أو حتى الضغط على مفتاح لوحة المفاتيح. للاستجابة لهذه الأحداث، تستخدم addEventListener() الذي يربط دالة (تُسمى Handler أو Callback) بعنصر معين، بحيث تُستدعى تلقائياً كلما حدث ذلك الحدث المحدد.

تقبل addEventListener() ثلاثة وسائط: نوع الحدث كنص (مثل "click" أو "submit" أو "keydown")، والدالة التي ستُنفَّذ عند الحدث، وخيارات إضافية اختيارية. الميزة الكبرى لـ addEventListener مقارنة بالطرق القديمة (مثل onclick المباشر في HTML) هي إمكانية ربط أكثر من مستمع واحد لنفس الحدث على نفس العنصر دون أن يُلغي أحدهما الآخر.

عند استدعاء دالة الحدث، تُمرَّر لها تلقائياً كائن يُسمى Event، ويحتوي معلومات مهمة عن الحدث نفسه: target للإشارة للعنصر الذي وقع عليه الحدث فعلياً، وpreventDefault() لمنع السلوك الافتراضي للمتصفح (مثل منع إعادة تحميل الصفحة عند إرسال نموذج، أو منع فتح رابط)، وstopPropagation() لإيقاف انتشار الحدث لمكونات الصفحة الأخرى.

مفهوم مهم جداً هنا هو "انتشار الحدث" (Event Bubbling) — عندما يقع حدث على عنصر داخلي، فإنه "يصعد" تلقائياً ليُفعّل نفس نوع الحدث على كل العناصر الأب المحيطة به أيضاً، ما لم تُوقفه بـ stopPropagation. تُستغل هذه الخاصية في تقنية تُسمى "تفويض الأحداث" (Event Delegation)، حيث تضع مستمع حدث واحداً على عنصر أب (كقائمة كاملة) بدلاً من وضع مستمع منفصل على كل عنصر ابن (كل عنصر قائمة)، وهذا يُحسّن الأداء بشكل كبير خاصة مع العناصر الديناميكية المُضافة لاحقاً.

الصياغة (Syntax)

syntax
1const زر = document.querySelector("#submitBtn");
2
3زر.addEventListener("click", function (حدث) {
4 console.log("تم الضغط!", حدث.target);
5});
6
7// إيقاف السلوك الافتراضي (مثل إرسال نموذج)
8نموذج.addEventListener("submit", (حدث) => {
9 حدث.preventDefault();
10});

أمثلة عملية

مثال 1: أحداث شائعة: input, keydown, load

أحداث شائعة: input, keydown, load
1// أحداث شائعة مختلفة
2const مربع_نص = document.querySelector("#search");
3
4مربع_نص.addEventListener("input", (حدث) => {
5 console.log("القيمة الحالية:", حدث.target.value);
6});
7
8document.addEventListener("keydown", (حدث) => {
9 if (حدث.key === "Enter") console.log("تم الضغط على Enter");
10});
11
12window.addEventListener("load", () => {
13 console.log("اكتمل تحميل الصفحة بالكامل");
14});

مثال 2: تفويض الأحداث للعناصر الديناميكية

تفويض الأحداث للعناصر الديناميكية
1// تفويض الأحداث (Event Delegation) — مستمع واحد بدل عشرات
2const القائمة = document.querySelector("#todoList");
3
4القائمة.addEventListener("click", (حدث) => {
5 if (حدث.target.matches(".delete-btn")) {
6 حدث.target.closest("li").remove();
7 }
8});
9// يعمل حتى مع عناصر li تُضاف لاحقاً بشكل ديناميكي!

نصائح احترافية

  • —استخدم addEventListener بدل onclick المباشر في HTML — يسمح بربط عدة مستمعين ويفصل المنطق عن البنية.
  • —preventDefault() ضرورية جداً عند التعامل مع نماذج تريد معالجتها بجافاسكريبت بدل إعادة تحميل الصفحة.
  • —استخدم تفويض الأحداث (وضع مستمع على عنصر أب) عند التعامل مع قوائم طويلة أو عناصر تُضاف ديناميكياً — أداء أفضل بكثير.
  • —event.target يُشير للعنصر الفعلي الذي وقع عليه الحدث، وقد يختلف عن العنصر الذي وضعت عليه addEventListener.

الدرس السابق

تعديل محتوى الخصائص والتصميم (Modifying Elements & Styles)

الدرس التالي

إنشاء وحذف عناصر الصفحة ديناميكياً (Creating & Deleting Nodes)

نوفيل

منصة تعليم البرمجة الأولى بالعربي. تعلم من الصفر حتى الاحتراف مع كورسات احترافية وتحديات ذكاء اصطناعي.

المنصة

  • الكورسات
  • التحديات
  • المقالات
  • الأدوات

الحساب

  • إنشاء حساب
  • تسجيل الدخول
  • لوحة التحكم
  • الملف الشخصي

روابط

  • سياسة الخصوصية
  • شروط الاستخدام
  • عن نوفيل
  • تواصل معنا

© 2026 نوفيل. جميع الحقوق محفوظة.

صُنع بـ في مصر