حدث DOM

أحداث نموذج كائن المستند (DOM) هي إشارة إلى وقوع حدث ما، أو أنه جارٍ، ويمكن أن تُفعَّل من خلال تفاعلات المستخدم أو المتصفح. [ 1 ] تستطيع لغات البرمجة النصية من جانب العميل ، مثل JavaScript و JScript و VBScript و Java، تسجيل معالجات أو مستمعات أحداث متنوعة على عقد العناصر داخل شجرة DOM ، كما هو الحال في مستندات HTML و XHTML و XUL و SVG .

أمثلة على أحداث DOM:

  • عندما ينقر المستخدم بالماوس
  • عند تحميل صفحة الويب
  • عند تحميل الصورة
  • عندما يتحرك مؤشر الماوس فوق عنصر ما
  • عند تغيير حقل الإدخال
  • عند إرسال نموذج HTML
  • عندما يضغط المستخدم على مفتاح [ 2 ]

تاريخياً، وكما هو الحال مع نموذج كائن المستند (DOM)، كانت نماذج الأحداث المستخدمة من قبل متصفحات الويب المختلفة تتضمن اختلافات جوهرية تسببت في مشاكل التوافق. ولمعالجة هذه المشكلة، قام اتحاد شبكة الويب العالمية (W3C) بتوحيد نموذج الأحداث في المستوى الثاني من نموذج كائن المستند (DOM Level 2).

الفعاليات

أحداث HTML

الأحداث الشائعة

توجد مجموعة ضخمة من الأحداث التي يمكن توليدها بواسطة معظم عقد العناصر:

لاحظ أن تصنيف الحدث أعلاه ليس مطابقًا تمامًا لتصنيف W3C.

فئةيكتبيصفوصففقاعاتقابل للإلغاء
فأرةانقرانقريتم إطلاق هذا الحدث عند النقر بزر جهاز التأشير فوق عنصر ما. يُعرَّف النقر بأنه الضغط على زر الماوس ثم رفعه فوق نفس الموقع على الشاشة. تسلسل هذه الأحداث هو:
  • الضغط على زر الماوس
  • رفع الماوس
  • انقر
نعمنعم
dblclickانقر نقرًا مزدوجًايتم تشغيلها عند النقر المزدوج على زر جهاز التأشير فوق عنصر مانعمنعم
الضغط على زر الماوسعند الضغط على زر الماوسيتم تشغيله عند الضغط على زر جهاز التأشير فوق عنصر مانعمنعم
رفع الماوسonmouseupيتم إطلاقها عند تحرير زر جهاز التأشير فوق عنصر مانعمنعم
مرر مؤشر الماوسعند تمرير مؤشر الماوسيتم إطلاقها عند تحريك جهاز التأشير فوق عنصر مانعمنعم
mousemove [ 7 ]عند تحريك الماوسيتم إطلاقها عند تحريك جهاز التأشير أثناء وجوده فوق عنصر مانعمنعم
إخراج الماوسonmouseoutيتم إطلاق النار عند تحريك جهاز التأشير بعيدًا عن عنصر مانعمنعم
دراجستارتبدء تشغيل السحبيتم تشغيلها على عنصر عند بدء عملية السحب.نعمنعم
يجرأوندراغيتم إطلاق هذا الحدث عند مصدر السحب، أي العنصر الذي تم فيه إطلاق حدث السحب، أثناء عملية السحب.نعمنعم
دراغنترondragenterيتم تشغيلها عند تحريك الماوس فوق عنصر ما لأول مرة أثناء عملية السحب.نعمنعم
رحيل سريعأوندراغليفيتم إطلاق هذا الحدث عندما يغادر مؤشر الماوس عنصرًا ما أثناء عملية السحب.نعملا
دراغ أوفرondragoverيتم إطلاق هذا الحدث عند تحريك الماوس فوق عنصر ما أثناء عملية السحب.نعمنعم
يسقطأوندروبيتم إطلاق حدث الإفلات على العنصر الذي يحدث فيه الإفلات في نهاية عملية السحب.نعمنعم
دراجيندأوندراغندسيتلقى مصدر السحب حدث dragend عند اكتمال عملية السحب، سواء نجحت أم لا.نعملا
لوحة المفاتيحمفتاح الضغطأونكي داونيتم تشغيلها قبل الضغط على المفتاح، عند الضغط على مفتاح في لوحة المفاتيح.نعمنعم
ضغطة مفتاحضغطة مفتاحيتم تشغيلها بعد الضغط على مفتاح، عند الضغط على مفتاح في لوحة المفاتيح.نعمنعم
رفع المفاتيحonkeyupيتم تشغيله عند تحرير مفتاح على لوحة المفاتيحنعمنعم
إطار HTML / كائنحمولةتحميليتم تشغيل هذا الحدث عندما ينتهي برنامج المستخدم من تحميل جميع المحتويات داخل المستند، بما في ذلك النوافذ والإطارات والكائنات والصور.

بالنسبة للعناصر، يتم تشغيلها عندما ينتهي تحميل العنصر المستهدف وجميع محتوياته

لالا
تفريغ الشحنةعند التفريغيتم تشغيل هذا الحدث عندما يقوم برنامج المستخدم بإزالة جميع المحتويات من نافذة أو إطار.

بالنسبة للعناصر، يتم تشغيلها عند إزالة العنصر المستهدف أو أي من محتوياته.

لالا
إجهاضإجهاضيتم تشغيل هذا الإجراء عندما يتم إيقاف تحميل كائن/صورة قبل اكتمال تحميلها.نعملا
خطأعلى الخطأيتم تشغيل هذا الخطأ عندما يتعذر تحميل كائن/صورة/إطار بشكل صحيحنعملا
تغيير الحجمتغيير الحجميتم تشغيلها عند تغيير حجم عرض المستندنعملا
التمريرالتمريريتم تشغيلها عند تمرير عنصر أو عرض مستندلا، باستثناء أن حدث التمرير على المستند يجب أن ينتقل إلى النافذة [ 8 ]لا
نموذج HTMLيختارonselectيتم تشغيل هذا الحدث عندما يحدد المستخدم نصًا في حقل نصي ، بما في ذلك حقل الإدخال وحقل النص.نعملا
يتغيرالتغييريتم تشغيل هذا الإجراء عندما يفقد عنصر تحكم التركيز على الإدخال ، وقد تم تعديل قيمته منذ اكتساب التركيز.نعملا
يُقدِّمonsubmitيتم تشغيلها عند تقديم نموذجنعمنعم
إعادة ضبطإعادة الضبطيتم تشغيلها عند إعادة تعيين النموذجنعملا
ركزالتركيزيتم تشغيل هذا الحدث عندما يحصل عنصر ما على التركيز إما عن طريق جهاز التأشير أو عن طريق التنقل باستخدام علامات التبويبلالا
ضبابيةضبابيةيتم تشغيل هذا الحدث عندما يفقد عنصر ما التركيز إما عن طريق جهاز التأشير أو عن طريق التنقل باستخدام مفتاح Tab.لالا
واجهة المستخدمالتركيز(لا أحد)يشبه حدث التركيز في HTML، ولكن يمكن تطبيقه على أي عنصر قابل للتركيزنعملا
التركيز على(لا أحد)يشبه حدث فقدان التركيز في HTML، ولكن يمكن تطبيقه على أي عنصر قابل للتركيزنعملا
DOMActivate(لا أحد)يشبه حدث أمر XUL. يتم تشغيله عند تنشيط عنصر ما، على سبيل المثال، من خلال نقرة بالماوس أو ضغطة مفتاح.نعمنعم
الطفرةتم تعديل شجرة DOM الفرعية(لا أحد)يتم تشغيلها عند تعديل الشجرة الفرعيةنعملا
DOMNodeInserted(لا أحد)يتم تشغيل هذا الحدث عند إضافة عقدة كعقدة فرعية لعقدة أخرىنعملا
تمت إزالة عقدة DOM(لا أحد)يتم تشغيل هذا الحدث عند إزالة عقدة من شجرة DOMنعملا
تمت إزالة عقدة DOM من المستند(لا أحد)يتم تشغيل هذا الإجراء عند إزالة عقدة من مستند.لالا
DOMNodeInsertedIntoDocument(لا أحد)يتم تشغيلها عند إدراج عقدة في مستندلالا
DOMAttrModified(لا أحد)يتم تشغيلها عند تعديل سمة مانعملا
تم تعديل بيانات الشخصية DOMCharacterData(لا أحد)يتم تشغيلها عند تعديل بيانات الشخصيةنعملا
تقدمبدء التحميل(لا أحد)بدأ التقدم.لالا
تقدم(لا أحد)جارٍ التنفيذ. بعد إرسال أمر بدء التحميل.لالا
خطأ(لا أحد)فشل التقدم. بعد إرسال آخر تقدم، أو بعد إرسال بدء التحميل إذا لم يتم إرسال التقدم.لالا
إجهاض(لا أحد)يتم إنهاء عملية التقدم. بعد إرسال آخر عملية تقدم، أو بعد إرسال بدء التحميل إذا لم يتم إرسال أي عملية تقدم.لالا
حمولة(لا أحد)تتم عملية التقدم بنجاح. بعد إرسال آخر عملية تقدم، أو بعد إرسال بدء التحميل إذا لم يتم إرسال عملية التقدم.لالا
محمل(لا أحد)توقف التقدم. بعد إرسال إحدى رسائل الخطأ أو الإلغاء أو التحميل.لالا

تجدر الإشارة إلى أن الأحداث التي تبدأ أسماؤها بـ "DOM" غير مدعومة بشكل جيد حاليًا، ولهذا السبب ولأسباب أخرى تتعلق بالأداء، فقد تم إيقاف استخدامها من قِبل اتحاد شبكة الويب العالمية (W3C) في المستوى الثالث من DOM. يدعم متصفحا موزيلا وأوبرا أحداث DOMAttrModified و DOMNodeInserted و DOMNodeRemoved و DOMCharacterDataModified . بينما يدعم متصفحا كروم وسفاري هذه الأحداث، باستثناء DOMAttrModified .

فعاليات اللمس

تُولّد متصفحات الويب التي تعمل على الأجهزة التي تدعم اللمس ، مثل نظامي التشغيل iOS من Apple و Android من Google ، أحداثًا إضافية. [ 9 ] : §5.3

فئةيكتبيصفوصففقاعاتقابل للإلغاء
يلمسبداية سريعةيتم تشغيلها عند وضع إصبع على سطح اللمس/الشاشة.نعمنعم
تاتشينديتم إطلاقها عند إزالة الإصبع من سطح اللمس/الشاشة.نعمنعم
اللمس والتحريكيتم تشغيلها عند تحريك إصبع موضوع مسبقًا على الشاشة عبرها.نعمنعم
مركز اللمسيتم تشغيلها عندما تنتقل نقطة اللمس إلى المنطقة التفاعلية المحددة بواسطة عنصر DOM.نعمنعم
إجازة سريعةيتم تشغيلها عندما تتحرك نقطة اللمس خارج المنطقة التفاعلية المحددة بواسطة عنصر DOM.نعمنعم
إلغاء اللمسيجب على وكيل المستخدم إرسال هذا النوع من الأحداث للإشارة إلى انقطاع نقطة اللمس بطريقة خاصة بالتنفيذ، مثل التحرك خارج حدود نافذة وكيل المستخدم. كما يجوز لوكيل المستخدم إرسال هذا النوع من الأحداث عندما يضع المستخدم نقاط لمس (نقطة الإحداثيات التي يتقاطع عندها المؤشر (مثل الإصبع أو القلم) مع سطح واجهة المستخدم) على سطح اللمس أكثر مما هو مُهيأ للجهاز أو التنفيذ لتخزينه، وفي هذه الحالة يجب إزالة أقدم كائن نقطة لمس في قائمة اللمس. [ 9 ] : §5.9نعملا

في مسودة توصية W3CTouchEvent ، يقدم عنصر `<div>` قائمة TouchListبالمواقع Touch، ومفاتيح التعديل التي كانت نشطة، وقائمة TouchListبالمواقع Touchداخل عنصر DOM المستهدف، وقائمة TouchListبالمواقع Touchالتي تغيرت منذ السابق TouchEvent. [ 9 ]

لم تنضم شركة آبل إلى مجموعة العمل هذه، وأخرت توصية اتحاد شبكة الويب العالمية (W3C) بمواصفات أحداث اللمس الخاصة بها من خلال الكشف عن براءات الاختراع في وقت متأخر من عملية التوصية. [ 10 ]

أحداث المؤشر

قد تُولّد متصفحات الويب على الأجهزة المزودة بأنواع مختلفة من أجهزة الإدخال، بما في ذلك الفأرة ولوحة اللمس والقلم، أحداث إدخال مُدمجة. يستطيع المستخدمون معرفة نوع جهاز الإدخال الذي تم الضغط عليه، والزر الذي تم الضغط عليه، وقوة الضغط على الزر في حالة استخدام قلم اللمس. اعتبارًا من أكتوبر 2013، يدعم متصفحا إنترنت إكسبلورر 10 و11 هذه الميزة فقط. [ 11 ]

فئةيكتبيصفوصففقاعاتقابل للإلغاء
مؤشرمؤشر لأسفلمؤشر لأسفليتم إطلاقها عند تنشيط زر جهاز التأشير، أو الضغط عليه فوق عنصر ما.نعمنعم
نقطة لأعلىonpointerupيتم إطلاقها عند تحرير زر جهاز التأشير فوق عنصر مانعمنعم
إلغاء المؤشرإلغاء المؤشريتم إطلاقها عندما يكون من غير المرجح أن يستمر جهاز التأشير في إنتاج حدث لأنه، على سبيل المثال، يتم استخدام الجهاز للتحريك/التكبير بعد حدث الضغط على المؤشر.نعمنعم
تحريك المؤشرonpointermoveيتم إطلاقها عند تحريك جهاز التأشير أثناء وجوده فوق عنصر مانعمنعم
مؤشر الماوسonpointeroverيتم إطلاقها عند تحريك جهاز التأشير فوق عنصر مانعمنعم
مؤشرonpointeroutيتم تشغيل هذا الحدث عند تحريك جهاز التأشير بعيدًا عن عنصر ما. كما يتم تشغيله أيضًا بعد رفع المؤشر بواسطة جهاز التأشير دون تحريك المؤشر فوقه، أو بعدنعمنعم
مؤشرonpointerenterيتم تشغيلها عند تحريك جهاز التأشير فوق عنصر ما، أو عند الضغط على زر جهاز التأشير الذي لا يدعم التحويم فوق أحد العناصر التابعة له.لانعم
ورقة المؤشرإجازة مؤشريتم تشغيلها عند تحريك جهاز التأشير بعيدًا عن عنصر ما، أو عند تحرير زر جهاز التأشير الذي لا يدعم التحويم فوق العناصر التابعة له.لانعم
التقاط المؤشرالتقاط المؤشر المفقوديتم تشغيلها عند التقاط المؤشر بواسطة طريقة setPointerCapture.نعملا
التقاط المؤشر المفقودالتقاط المؤشر المفقوديتم تشغيلها عند تحرير المؤشر بواسطة طريقة releasePointerCapture.نعملا

فعاليات واجهة المستخدم المستقلة

لم يتم تطبيقها بشكل كامل بعد، لكن مجموعات عمل واجهة المستخدم المستقلة تسعى لمساعدة مطوري تطبيقات الويب على دعم أحداث تفاعل المستخدم القياسية دون الحاجة إلى التعامل مع أحداث تقنية مختلفة خاصة بالمنصة قد تتوافق معها. [ 12 ]

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

على سبيل المثال، يحتاج مطورو تطبيقات الويب، الذين يرغبون في اعتراض نية المستخدم للتراجع عن الإجراء الأخير، إلى "الاستماع" لجميع الأحداث التالية:

  • Control+Z على نظامي التشغيل ويندوز ولينكس.
  • Command+Z على نظام التشغيل Mac OS X.
  • أحداث الاهتزاز على بعض الأجهزة المحمولة.

سيكون من الأسهل الاستماع إلى طلب واحد موحد "للتراجع" عن الإجراء السابق.

فئةيكتبوصففقاعاتقابل للإلغاء
طلبطلب غير مطلوبيشير هذا إلى رغبة المستخدم في "التراجع" عن الإجراء السابق. (قد يتم استبداله بواجهة مدير التراجع).نعمنعم
إعادة الطلبيشير هذا إلى رغبة المستخدم في "إعادة" الإجراء الذي تم "التراجع" عنه سابقًا. (قد يتم استبداله بواجهة مدير التراجع).نعملا
توسيع الطلبيشير إلى رغبة المستخدم في الكشف عن المعلومات في قسم مطوي (مثل أداة الكشف) أو عقدة فرعية في التسلسل الهرمي (مثل عرض الشجرة ).نعمنعم
طلب الانهياريشير إلى رغبة المستخدم في إخفاء أو طي المعلومات في قسم موسع (مثل أداة الكشف) أو عقدة فرعية في التسلسل الهرمي (مثل عرض الشجرة).نعمنعم
رفض الطلبيشير إلى أن المستخدم يرغب في "إغلاق" العرض الحالي (على سبيل المثال إلغاء مربع حوار، أو إغلاق قائمة منبثقة).نعمنعم
طلب الحذفيشير هذا إلى أن المستخدم يريد بدء إجراء "حذف" على العنصر المحدد أو العرض الحالي.نعمنعم
طلب التركيزطلب التركيز الاتجاهييبدأ هذا الحدث عندما يرسل متصفح المستخدم طلب "تركيز اتجاهي" إلى تطبيق الويب. لا ينبغي لمطوري الويب استخدام أحداث طلب التركيز الاتجاهي أو التسجيل فيها عندما تكون أحداث التركيز والتشويش القياسية للمتصفح كافية. قد يؤدي استخدام هذه الأحداث دون داعٍ إلى انخفاض الأداء أو تجربة مستخدم سلبية.نعمنعم
طلب التركيز الخطييبدأ هذا الحدث عندما يرسل متصفح المستخدم طلب "تركيز خطي" إلى تطبيق الويب. لا ينبغي لمطوري الويب استخدام أحداث "التركيز الخطي" أو التسجيل فيها عندما تكون أحداث التركيز وفقدان التركيز القياسية في المتصفح كافية. هذا النوع من الأحداث ضروري فقط في أنواع عناصر التحكم المتخصصة، مثل جداول البيانات، حيث قد لا يكون العنصر التالي المنطقي قابلاً للتركيز، أو حتى في نموذج كائن المستند (DOM)، إلا عند طلبه. قد يؤدي استخدام هذه الأحداث دون داعٍ إلى انخفاض الأداء أو تجربة مستخدم سلبية.نعمنعم
طلب تركيز لوحة الألوانيبدأ هذا الحدث عندما يرسل برنامج المستخدم طلب "تركيز اللوحة" إلى تطبيق الويب. يجب على مطوري تطبيقات الويب الذين يتلقون هذا الحدث نقل التركيز إلى اللوحة الأولى في تطبيق الويب، أو التبديل بين جميع اللوحات المتاحة. ملاحظة: تُعرف اللوحات أحيانًا باسم مربعات الحوار غير المشروطة أو نوافذ الفحص.نعمنعم
طلب تركيز شريط الأدواتيبدأ هذا الحدث عندما يرسل برنامج المستخدم طلب "تركيز شريط الأدوات" إلى تطبيق الويب. يجب على مطوري تطبيقات الويب الذين يتلقون هذا الحدث نقل التركيز إلى شريط الأدوات الرئيسي في تطبيق الويب، أو التبديل بين جميع أشرطة الأدوات المتاحة.نعمنعم
طلب التلاعبطلب نقليتم بدء هذه العملية عندما يرسل برنامج المستخدم طلب نقل إلى تطبيق الويب مصحوبًا بقيم دلتا س/ص. ويُستخدم هذا، على سبيل المثال، عند نقل عنصر إلى موقع جديد على لوحة التخطيط.نعمنعم
طلب بانيبدأ هذا الإجراء عندما يرسل برنامج المستخدم طلب تحريك إلى تطبيق الويب مع قيم دلتا س/ص المصاحبة. ويُستخدم هذا، على سبيل المثال، عند تغيير نقطة المركز أثناء تحريك خريطة أو أي عارض صور مخصص آخر.نعمنعم
طلب تدويريتم بدء العملية عندما يرسل وكيل المستخدم طلب تدوير إلى تطبيق الويب مع قيم x/y الأصلية المصاحبة وقيمة التدوير بالدرجات.نعمنعم
طلب تكبير/تصغيريتم بدء العملية عندما يرسل وكيل المستخدم طلب تكبير/تصغير إلى تطبيق الويب مع قيم x/y الأصلية المصاحبة وعامل مقياس التكبير/التصغير.نعمنعم
طلب التمريرطلب التمريريبدأ هذا الحدث عندما يرسل برنامج المستخدم طلب تمرير إلى تطبيق الويب مصحوبًا بقيم دلتا x/y أو إحدى قيم scrollType الأخرى المحددة. يجب على المطورين استخدام هذا الحدث و uiaction فقط مع طرق عرض التمرير المخصصة.نعمنعم
طلب تغيير القيمةطلب تغيير القيمةيتم بدء هذه العملية عندما يرسل برنامج المستخدم طلب تغيير قيمة إلى تطبيق الويب. وتُستخدم في عناصر التحكم ذات النطاق المخصص مثل أشرطة التمرير، والشرائح الدوارة، وما إلى ذلك.نعمنعم

أحداث خاصة بمتصفح إنترنت إكسبلورر

بالإضافة إلى أحداث (W3C) الشائعة، يضيف متصفح إنترنت إكسبلورر نوعين رئيسيين من الأحداث . وقد تم تطبيق بعض هذه الأحداث كمعايير فعلية من قبل متصفحات أخرى.

فئةيكتبيصفوصففقاعاتقابل للإلغاء
لوحة كتابةيقطعقصيتم إطلاق النار بعد قص عنصر محدد إلى الحافظة.نعمنعم
ينسخنسخةيتم إطلاق النار بعد نسخ التحديد إلى الحافظة.نعمنعم
لصقملصقيتم إطلاق النار بعد لصق عنصر محدد من الحافظة.نعمنعم
قبل القطعonbeforecutيتم إطلاق النار قبل قص التحديد إلى الحافظة.نعمنعم
قبل النسخقبل النسخيتم إطلاق النار قبل نسخ التحديد إلى الحافظة.نعمنعم
قبل اللصقonbeforepasteيتم إطلاق النار قبل لصق التحديد من الحافظة.نعمنعم
ربط البياناتبعد التحديثonafterupdateيتم تشغيلها فور تحديث كائن مرتبط بالبيانات.نعملا
قبل التحديثonbeforeupdateيتم إطلاق النار قبل تحديث مصدر البيانات.نعمنعم
تغيير الخليةتغيير الخليةيتم تشغيلها عند تغيير مصدر البيانات.نعملا
البيانات المتاحةالبيانات متاحةيتم تشغيلها عند توفر بيانات جديدة من مصدر بيانات.نعملا
تم تغيير مجموعة البياناتondatasetchangedيتم تشغيلها عند تغيير المحتوى في مصدر البيانات.نعملا
مجموعة البيانات كاملةاكتمال مجموعة البياناتيتم تشغيلها عند اكتمال نقل البيانات من مصدر البيانات.نعملا
تحديث الخطأتحديث عند الخطأيتم تشغيل النظام في حالة حدوث خطأ أثناء تحديث حقل البيانات.نعملا
رونترمدخليتم تشغيلها عند توفر صف جديد من البيانات من مصدر البيانات.نعملا
رو إكسيتمخرجيتم تشغيلها عندما تنتهي معالجة صف من البيانات من مصدر البيانات.لانعم
حذف الصفوفonrowsdeleteيتم تشغيلها عند حذف صف من البيانات من مصدر البيانات.نعملا
تم إدراج الصفأُدرج في الصفيتم تشغيلها عند إدخال صف من البيانات من مصدر البيانات.نعملا
فأرةقائمة السياققائمة السياقيتم تشغيلها عند عرض قائمة السياق.نعمنعم
يجرأوندراغيتم تشغيلها أثناء سحب الماوس (على العنصر المتحرك).نعمنعم
دراجستارتبدء تشغيل السحبيتم تشغيلها عند بدء سحب الماوس (على العنصر المتحرك).نعمنعم
دراغنترondragenterيتم إطلاق النار عندما يتم سحب شيء ما إلى منطقة (على العنصر المستهدف).نعمنعم
دراغ أوفرondragoverيتم إطلاق النار عند سحب المؤشر فوق منطقة معينة (على العنصر المستهدف).نعمنعم
رحيل سريعأوندراغليفيتم إطلاق النار عندما يتم سحب شيء ما خارج منطقة معينة (على العنصر المستهدف).نعمنعم
دراجيندأوندراغنديتم تشغيلها عند انتهاء سحب الماوس (على العنصر المتحرك).نعمنعم
يسقطأوندروبيتم تشغيلها عند تحرير زر الماوس فوق هدف صالح أثناء السحب (على العنصر المستهدف).نعمنعم
بدايةonselectstartيتم تشغيلها عندما يبدأ المستخدم في تحديد النص.نعمنعم
لوحة المفاتيحيساعدonhelpيتم تشغيلها عندما يبدأ المستخدم في طلب المساعدة.نعمنعم
إطار/كائن HTMLقبل التفريغonbeforeunloadيتم إطلاقها قبل تفريغ المستند.لانعم
قفتوقفيتم تشغيل هذا الحدث عندما يتوقف المستخدم عن تحميل الكائن. (على عكس حدث الإلغاء، يمكن ربط حدث الإيقاف بالمستند)لالا
نموذج HTMLقبل التحرير التركيزonbeforeeditfocusيتم إطلاق النار قبل أن يكتسب عنصر ما التركيز اللازم للتحرير.نعمنعم
سرادقيبدأبدء التشغيليتم تشغيلها عندما تبدأ لافتة العرض حلقة جديدة.لالا
ينهيعند الانتهاءيتم تشغيلها عند اكتمال عملية إعادة عرض الشاشة.لانعم
ارتدادالارتداديتم تشغيلها عندما ترتد شاشة التمرير في الاتجاه الآخر.لانعم
متنوعقبل الطباعةقبل الطباعةيتم إطلاق النار قبل طباعة المستندلالا
بعد الطباعةبعد الطباعةيتم تشغيلها فور طباعة المستند.لالا
تغيير الملكيةتغيير الملكيةيتم تشغيلها عند تغيير خاصية كائن ما.لالا
تغيير الفلترتغيير الفلتريتم تشغيلها عندما يغير المرشح خصائصه أو ينهي عملية انتقال.لالا
تغيير الحالة الجاهزonreadystatechangeيتم تشغيلها عند تغيير خاصية readyState لعنصر ما.لالا
التقاط غير محكمالتقاط مفقوديتم تشغيلها عند استدعاء طريقة releaseCapture.لالا

تجدر الإشارة إلى أن متصفحات موزيلا وسفاري وأوبرا تدعم أيضًا حدث readystatechange لكائن XMLHttpRequest . كما يدعم موزيلا حدث beforeunload باستخدام طريقة تسجيل الأحداث التقليدية (مستوى DOM 0). يدعم كل من موزيلا وسفاري قائمة السياق، بينما لا يدعمها متصفح إنترنت إكسبلورر لنظام ماك.

لاحظ أن فايرفوكس 6 والإصدارات الأحدث تدعم أحداث الطباعة المسبقة والطباعة اللاحقة.

فعاليات XUL

بالإضافة إلى أحداث (W3C) الشائعة، حددت موزيلا مجموعة من الأحداث التي تعمل فقط مع عناصر XUL .

فئةيكتبيصفوصففقاعاتقابل للإلغاء
فأرةتمرير الماوس DOMMouseScrollتمرير الماوس DOMMouseScrollيتم تشغيلها عند تحريك عجلة الماوس، مما يؤدي إلى تمرير المحتوى.نعمنعم
سحب وإسقاطانقلابيتم تشغيلها عندما يحرر المستخدم زر الماوس لإسقاط كائن يتم سحبه .لالا
دراغنترondragenterيتم تشغيل هذا الحدث عندما يتحرك مؤشر الماوس فوق عنصر ما لأول مرة أثناء السحب. وهو مشابه لحدث التمرير فوق العنصر، ولكنه يحدث أثناء السحب.لالا
اسحب للخارجondragexitيتم استدعاء هذا الحدث عندما يتحرك مؤشر الماوس بعيدًا عن عنصر أثناء السحب. كما يتم استدعاؤه أيضًا بعد إفلات العنصر. وهو مشابه لحدث mouseout ولكنه يحدث أثناء السحب.لالا
سحب الإيماءةإيماءةيتم تشغيلها عندما يبدأ المستخدم في سحب العنصر، عادةً عن طريق الضغط باستمرار على زر الماوس وتحريك الماوس.لالا
دراغ أوفرondragoverفيما يتعلق بحدث تحريك الماوس، يتم تشغيل هذا الحدث أثناء سحب شيء ما فوق عنصر ما.لالا
مدخلتغيير حالة مربع الاختياريتم تشغيلها عند تحديد خانة الاختيار أو إلغاء تحديدها، سواء من قبل المستخدم أو من خلال برنامج نصي.لالا
تغيير حالة الراديويتم تشغيلها عند تحديد زر الاختيار، سواء من قبل المستخدم أو من خلال برنامج نصي.لالا
يغلقإغلاقيتم تشغيلها عند تقديم طلب لإغلاق النافذة.لانعم
يأمرعند الطلبيشبه حدث DOMActivate الخاص بـ W3C. يتم تشغيله عند تنشيط عنصر ما، على سبيل المثال، من خلال النقر بالماوس أو الضغط على مفتاح.لالا
مدخلإدخاليتم تشغيلها عندما يقوم المستخدم بإدخال نص في مربع نص.نعملا
واجهة المستخدمDOMMenuItemActiveDOMMenuItemActiveيتم تشغيلها عند تمرير مؤشر الماوس فوق قائمة أو عنصر قائمة ، أو عند تمييزه.نعملا
DOMMenuItemInactiveDOMMenuItemInactiveيتم تشغيلها عندما لا يتم تحريك مؤشر الماوس فوق قائمة أو عنصر قائمة، أو عندما لا يتم تمييزه.نعملا
قائمة السياققائمة السياقيتم تشغيل هذا الإجراء عندما يطلب المستخدم فتح قائمة السياق الخاصة بالعنصر. يختلف الإجراء المطلوب للقيام بذلك باختلاف النظام الأساسي، ولكنه عادةً ما يكون النقر بزر الماوس الأيمن.لانعم
فيضانفيضانيقوم بتشغيل مربع أو عنصر تخطيط آخر عندما لا تكون هناك مساحة كافية لعرضه بالحجم الكامل.لالا
تم تغيير الفائضتم تغيير التدفق الزائديتم إطلاقها عند تغير حالة تجاوز السعة.لالا
التدفق السفليonunderflowيتم إطلاق النار على عنصر ما عندما تتوفر مساحة كافية لعرضه بالحجم الكامل.لالا
popuphiddenonpopuphiddenيُطلق نافذة منبثقة بعد إخفائها.لالا
إخفاء النوافذ المنبثقةإخفاء النافذة المنبثقةيتم تشغيل نافذة منبثقة عندما تكون على وشك الاختفاء.لالا
عرض نافذة منبثقةonpopupshowingيتم تشغيل نافذة منبثقة قبل فتحها مباشرة.لانعم
نافذة منبثقة تظهرonpopupshownيتم إرسال حدث إلى نافذة منبثقة بعد فتحها، تمامًا كما يتم إرسال حدث التحميل إلى نافذة عند فتحها.لالا
يأمرإذاعةبث مباشريتم وضع هذا الحدث على جهاز مراقبة. ويتم إرسال حدث البث عند تغيير خصائص جهاز البث الذي يتم الاستماع إليه.لالا
تحديث الأمرتحديث الأمريتم تشغيلها عند حدوث تحديث للأمر.لالا

فعاليات أخرى

في متصفحي موزيلا وأوبرا 9، توجد أيضًا أحداث غير موثقة تُعرف باسم DOMContentLoaded و DOMFrameContentLoaded، والتي يتم تشغيلها عند تحميل محتوى DOM. تختلف هذه الأحداث عن حدث "load" لأنها تُشغّل قبل تحميل الملفات ذات الصلة (مثل الصور). ومع ذلك، تمت إضافة حدث DOMContentLoaded إلى مواصفات HTML 5. [ 13 ] كما تم تطبيق حدث DOMContentLoaded في محرك عرض Webkit الإصدار 500 وما بعده. [ 14 ] [ 15 ] يتوافق هذا مع جميع إصدارات جوجل كروم وسفاري 3.1 وما بعده . كما تم تطبيق حدث DOMContentLoaded في إنترنت إكسبلورر 9. [ 16 ]

يدعم Opera 9 أيضًا أحداث Web Forms 2.0 التالية: DOMControlValueChanged و invalid و forminput و formchange .

تدفق الأحداث

لنفترض أن هدفين للأحداث يشاركان في شجرة . كلاهما لديه مستمعون للأحداث مسجلون على نفس نوع الحدث، ولنقل "نقرة". عندما ينقر المستخدم على العنصر الداخلي، هناك طريقتان محتملتان للتعامل مع ذلك:

  • يتم تشغيل العناصر من الخارج إلى الداخل (التقاط الأحداث). تم تطبيق هذا النموذج في متصفح نتسكيب نافيجاتور .
  • يتم تشغيل العناصر من الداخل إلى الخارج ( انتشار الأحداث ). يتم تطبيق هذا النموذج في متصفح إنترنت إكسبلورر ومتصفحات أخرى. [ 17 ]

تتخذ منظمة W3C موقفاً وسطاً في هذا الصراع. [ 18 ] : §1.2

وفقًا لـ W3C، تمر الأحداث بثلاث مراحل عندما يشارك هدف الحدث في شجرة:

  1. مرحلة الالتقاط: ينتقل الحدث من هدف الحدث الجذري إلى هدف الحدث
  2. المرحلة المستهدفة: ينتقل الحدث عبر هدف الحدث
  3. مرحلة الفقاعة ( اختيارية ): ينتقل الحدث عائدًا من هدف الحدث إلى هدف الحدث الجذري. تحدث مرحلة الفقاعة فقط للأحداث التي تتصاعد (حيث event.bubbles == true)

يمكنك الاطلاع على رسم توضيحي لتدفق هذا الحدث على الرابط التالي: https://domevents.dev

إيقاف الأحداث

أثناء انتقال حدث ما عبر أجهزة الاستماع للأحداث، يمكن إيقاف الحدث بواسطة event.stopPropagation()أوevent.stopImmediatePropagation()

  • event.stopPropagation()يتم إيقاف الحدث بعد انتهاء جميع مستمعي الأحداث المرتبطين بهدف الحدث الحالي في مرحلة الحدث الحالية.
  • event.stopImmediatePropagation()يتم إيقاف الحدث فورًا ولا يتم تنفيذ أي مستمعين آخرين للأحداث

عند إيقاف حدث ما، فإنه لن يستمر في مساره. إيقاف حدث ما لا يعني إلغاءه.

آليات قديمة لإيقاف حدث ما

  • اضبطه event.cancelBubbleعلى true(إنترنت إكسبلورر)
  • اضبط event.returnValueالخاصية علىfalse

إلغاء الفعاليات

cancelableيمكن إلغاء حدث ما عن طريق استدعاء الدالة المناسبة . event.preventDefault()سيؤدي إلغاء الحدث إلى تعطيل سلوك المتصفح الافتراضي لهذا الحدث. عند إلغاء الحدث، event.defaultPreventedسيتم تعيين الخاصية إلى قيمة فارغة true. لن يؤدي إلغاء الحدث إلى إيقاف مساره.

كائن الحدث

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

خصائص الحدث
اسميكتبوصف
يكتبسلسلة DOMاسم الحدث (غير حساس لحالة الأحرف في مستوى DOM 2 ولكنه حساس لحالة الأحرف في مستوى DOM 3 [ 19 ] ).
هدفهدف الحدثيُستخدم للإشارة إلى هدف الحدث الذي تم إرسال الحدث إليه في الأصل.
الهدف الحاليهدف الحدثيُستخدم للإشارة إلى هدف الحدث الذي تتم معالجة مستمعي الأحداث الخاصة به حاليًا.
مرحلة الحدثقصير غير موقعيُستخدم للإشارة إلى المرحلة التي يتم تقييمها حاليًا من تدفق الأحداث.
فقاعةمنطقييُستخدم للإشارة إلى ما إذا كان الحدث حدثًا متصاعدًا أم لا.
قابل للإلغاءمنطقييُستخدم للإشارة إلى ما إذا كان من الممكن منع الإجراء الافتراضي لحدث ما أم لا.
الطابع الزمنيDOMTimeStampيُستخدم لتحديد الوقت (بالمللي ثانية بالنسبة إلى الحقبة) الذي تم فيه إنشاء الحدث.
أساليب الأحداث
اسمنوع الوسيطاسم الوسيطةوصف
إيقاف الانتشارلمنع انتشار الحدث أثناء تدفق الأحداث.
منع الوضع الافتراضيلإلغاء الحدث إذا كان قابلاً للإلغاء، مما يعني أن أي إجراء افتراضي يتم اتخاذه عادةً بواسطة التنفيذ نتيجة للحدث لن يحدث.
حدث التهيئةسلسلة DOMeventTypeArgيحدد نوع الحدث.
منطقيcanBubbleArgيحدد ما إذا كان الحدث يمكن أن ينتشر أم لا.
منطقيcancelableArgيحدد ما إذا كان من الممكن منع الإجراء الافتراضي للحدث أم لا.

نماذج التعامل مع الأحداث

مستوى DOM 0

تم تقديم نموذج معالجة الأحداث هذا بواسطة متصفح نتسكيب نافيغيتور ، ولا يزال النموذج الأكثر توافقًا مع مختلف المتصفحات حتى عام 2005.يوجد نوعان من النماذج : النموذج المدمج والنموذج التقليدي.

نموذج مضمن

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

<!doctype html><htmllang="en"><head><metacharset="utf-8"><title>Inline Event Handling</title></head><body><h1>Inline Event Handling</h1><p>Hey <ahref="http://www.example.com"onclick="triggerAlert('Joe'); return false;">Joe</a>!</p><script>functiontriggerAlert(name){window.alert("Hey "+name);}</script></body></html>

One common misconception with the inline model is the belief that it allows the registration of event handlers with custom arguments, e.g. name in the triggerAlert function. While it may seem like that is the case in the example above, what is really happening is that the JavaScript engine of the browser creates an anonymous function containing the statements in the onclick attribute. The onclick handler of the element would be bound to the following anonymous function:

function(){triggerAlert('Joe');returnfalse;}

This limitation of the JavaScript event model is usually overcome by assigning attributes to the function object of the event handler or by using closures.

Traditional model

In the traditional model,[21] event handlers can be added or removed by scripts. Like the inline model, each event can only have one event handler registered. The event is added by assigning the handler name to the event property of the element object. To remove an event handler, simply set the property to null:

< !doctype html> < html lang = " en" > <head> < meta charset = " utf - 8" > <title> معالجة الأحداث التقليدية < / title > </head><body> <h1> معالجة الأحداث التقليدية < / h1 ><p> مرحباً جو! < / p ><script> var triggerAlert = function () { window.alert ( " Hey Joe " ) ; }; // تعيين معالج حدث document.onclick = triggerAlert ; // تعيين معالج حدث آخر window.onload = triggerAlert ; // إزالة معالج الحدث الذي تم تعيينه للتو window.onload = null ; </script> </body> </html>

لإضافة معلمات:

var name = 'Joe' ; document . onclick = ( function ( name ) { return function () { alert ( 'مرحباً ' + name + '!' ); }; }( name ));

تحافظ الدوال الداخلية على نطاقها .

المستوى الثاني من إدارة العمليات

صممت منظمة W3C نموذجًا أكثر مرونة للتعامل مع الأحداث في DOM المستوى 2. [ 18 ]

اسموصفنوع الوسيطاسم الوسيطة
إضافة مستمع للأحداثيسمح بتسجيل مستمعي الأحداث على هدف الحدث.سلسلة DOMيكتب
مستمع الأحداثالمستمع
منطقياستخدام الالتقاط
إزالة مستمع الحدثيسمح بإزالة مستمعي الأحداث من هدف الحدث.سلسلة DOMيكتب
مستمع الأحداثالمستمع
منطقياستخدام الالتقاط
حدث الإرساليسمح بإرسال الحدث إلى مستمعي الأحداث المشتركين.حدثevt

بعض الأمور المفيدة التي يجب معرفتها  :

  • لمنع حدوث تصاعدي، يجب على المطورين استدعاء stopPropagation()طريقة كائن الحدث.
  • لمنع استدعاء الإجراء الافتراضي للحدث، يجب على المطورين استدعاء طريقة preventDefault()كائن الحدث.

يتمثل الاختلاف الرئيسي عن النموذج التقليدي في إمكانية تسجيل عدة معالجات أحداث لنفس الحدث. useCaptureكما يمكن استخدام هذا الخيار لتحديد استدعاء المعالج في مرحلة الالتقاط بدلاً من مرحلة الانتشار. يدعم هذا النموذج متصفحات Mozilla و Opera و Safari و Chrome و Konqueror .

إعادة صياغة للمثال المستخدم في النموذج التقليدي

< ! doctype html> < html lang = " en" > <head> < meta charset = " utf - 8" > <title> DOM المستوى 2 </title> </head><body> <h1> DOM المستوى 2 </h1><p> مرحباً جو! < / p ><script> var heyJoe = function () { window.alert ( " مرحباً جو !" ); } // إضافة معالج حدث document.addEventListener ( " click" , heyJoe , true ) ; // مرحلة الالتقاط // إضافة معالج حدث آخر window.addEventListener ( " load" , heyJoe , false ) ; // مرحلة الانتشار // إزالة معالج الحدث الذي تمت إضافته للتو window.removeEventListener ( " load " , heyJoe , false ) ; </script></body> </html>

نموذج خاص بمتصفح إنترنت إكسبلورر

لا يتبع متصفح مايكروسوفت إنترنت إكسبلورر، قبل الإصدار 8، نموذج W3C، إذ تم إنشاء نموذجه الخاص قبل اعتماد معيار W3C. ويتبع إنترنت إكسبلورر 9 أحداث DOM من المستوى 3، [ 22 ] بينما ألغى إنترنت إكسبلورر 11 دعمه لنموذج مايكروسوفت الخاص. [ 23 ]

اسموصفنوع الوسيطاسم الوسيطة
إرفاق حدثعلى غرار طريقة addEventListener الخاصة بـ W3C.خيطحدث
مؤشرإشعار fp
حدث الفصلعلى غرار طريقة W3C لإزالة مستمع الحدث.خيطحدث
مؤشرإشعار fp
حدث حريقعلى غرار طريقة dispatchEvent الخاصة بـ W3C.خيطحدث
حدثكائن الحدث

بعض الأمور المفيدة التي يجب معرفتها  :

  • لمنع انتشار الحدث، يجب على المطورين تعيين خاصية الحدث cancelBubble.
  • لمنع استدعاء الإجراء الافتراضي للحدث، يجب على المطورين تعيين returnValueخاصية الحدث.
  • تشير الكلمة thisالمفتاحية إلى windowالكائن العام.

مرة أخرى، يختلف هذا النموذج عن النموذج التقليدي في إمكانية تسجيل عدة معالجات أحداث لنفس الحدث. مع ذلك، useCaptureلا يمكن استخدام هذا الخيار لتحديد استدعاء المعالج في مرحلة الالتقاط. يدعم هذا النموذج متصفح مايكروسوفت إنترنت إكسبلورر والمتصفحات المبنية على ترايدنت (مثل ماكسثون وأفانت براوزر).

إعادة كتابة المثال المستخدم في النموذج القديم الخاص بمتصفح إنترنت إكسبلورر

< ! doctype html> < html lang = " en " > <head> < meta charset = "utf-8" > <title> نموذج خاص بمتصفح إنترنت إكسبلورر </ title > </head> <body> <h1> نموذج خاص بمتصفح إنترنت إكسبلورر < / h1 ><p> مرحباً جو! < / p ><script> var heyJoe = function () { window.alert ( " مرحباً جو !" ) ; } // إضافة معالج حدث document.attachEvent ( "onclick" , heyJoe ) ; // إضافة معالج حدث آخر window.attachEvent ( "onload" , heyJoe ) ; // إزالة معالج الحدث الذي تمت إضافته للتو window.detachEvent ( " onload " , heyJoe ) ; </script></body> </html>

مراجع

  1. "معيار DOM" . dom.spec.whatwg.org . تم الاطلاع عليه بتاريخ 25-05-2021 .
  2. "أحداث DOM في جافا سكريبت" . www.w3schools.com . تم الاطلاع عليه بتاريخ 3 أغسطس 2019 .
  3. "7.8 السحب والإفلات - HTML5" .
  4. "واجهة برمجة تطبيقات السحب والإفلات لـ HTML" . 28 مارس 2024.
  5. "أحداث التقدم" .
  6. "واجهة برمجة تطبيقات الملفات" .
  7. "عنصر: حدث تحريك الماوس - واجهات برمجة تطبيقات الويب | MDN" . 22 ديسمبر 2023.
  8. "مواصفات أحداث المستوى 3 لنموذج كائن المستند (DOM) (مسودة عمل)" . W3C . تم الاطلاع عليه بتاريخ 17-04-2013 .
  9. 1 2 3 "أحداث اللمس، الإصدار 2 - مسودة محرر W3C" . W3C. 14 نوفمبر 2011. تم الاطلاع عليه بتاريخ 10 ديسمبر 2011 .
  10. "أبل تستخدم براءات الاختراع لتقويض المعايير المفتوحة مجدداً" . opera.com. 9 ديسمبر 2011. تم الاطلاع عليه بتاريخ 9 ديسمبر 2011 .
  11. "أحداث المؤشر" .
  12. "IndieUI: Events 1.0" .
  13. "معيار HTML" .
  14. أُرشف بتاريخ 11 يونيو 2010 في أرشيف الإنترنت (Wayback Machine) .
  15. «ما هي المتصفحات التي تدعم حدث DOMContentLoaded الأصلي؟» « نصائح تطوير من مختبرات بيرفكشن» . 29 يونيو 2011. مؤرشف من الأصل في 29 يونيو 2011. {{cite web}}: CS1 maint: bot: حالة عنوان URL الأصلي غير معروفة ( رابط )
  16. "إعادة توجيه تجربة القيادة" . مؤرشف من الأصل بتاريخ 2010-05-08 . تم الاطلاع عليه بتاريخ 2010-05-06 .
  17. "مقدمة عن الفعاليات" . Quirksmode.org . تم الاطلاع عليه بتاريخ 15 سبتمبر 2012 .
  18. 1 2 "مواصفات أحداث المستوى الثاني لنموذج كائن المستند (DOM)" . W3C . 13 نوفمبر 2000. تم الاطلاع عليه في 15 سبتمبر 2012 .
  19. "مواصفات أحداث المستوى 3 لنموذج كائن المستند (DOM) (مسودة عمل)" . W3C . تم الاطلاع عليه بتاريخ 17-04-2013 .
  20. "معالجات الأحداث المبكرة" . Quirksmode.org . تم الاطلاع عليه بتاريخ 15 سبتمبر 2012 .
  21. "نموذج تسجيل الفعاليات التقليدي" . Quirksmode.org . تم الاطلاع عليه بتاريخ 15 سبتمبر 2012 .
  22. "دعم أحداث المستوى الثالث من DOM في IE9" . مايكروسوفت . 26 مارس 2010. تم الاطلاع عليه بتاريخ 28 مارس 2010 .
  23. "تغييرات التوافق في معاينة IE11" . مايكروسوفت . 9 سبتمبر 2013. تم الاطلاع عليه بتاريخ 5 أكتوبر 2013 .

للمزيد من القراءة