الدرس 2 من 8
نافذة حوارية
- 16 دقيقة
- 7 معايير للتصحيح
- 3 تلميحات
- إلى المطلوب
هدف الدرس
التركيز لا يهرب
الشرح
أكثر النوافذ المخصّصة معطوبة: يفتحها المستخدم فيبقى التركيز خلفها، ويضغط Tab فيتنقّل في صفحة لا يراها.
وسم <dialog> يحلّ هذا كلّه بلا سطر: showModal() يحبس التركيز داخله، ويجعل ما خلفه غير قابل للوصول، ويغلق بـ Escape، ويُعيد التركيز إلى ما كان عليه عند الإغلاق. لا تكتب ذلك بيدك — الوسم يفعله.
وshow() ليست showModal(): الأولى تفتح نافذة عادية بلا حبس ولا خلفية ولا Escape. الخلط بينهما أكثر خطأ في هذا الوسم.
وما يبقى عليك اثنان: انقل التركيز إلى عنصر مفيد داخلها بعد الفتح، واستمع لحدث close — فهو يقع من الزرّ ومن Escape معًا، فتكتب ردّك مرّة واحدة بدل مرّتين.
ملاحظة على التصحيح: إطار المعاينة معزول أمنيًّا، وحدث close لا يصل داخله. فالفحص هنا يقيس ما يظهر أثره: نوع الفتح، والتركيز، والإغلاق، والخلفية. أما مستمع close فاكتبه — هو الصواب، وستحتاجه في صفحة حقيقية.
المطلوب
افتحها بـ showModal()، انقل التركيز داخلها، ونسّق الخلفية بـ ::backdrop.
معايير التصحيح
7 معايير- النافذة مغلقة ابتداءً
- الضغط يفتحها كنافذة حاجزة
- التركيز انتقل إلى داخلها
- زرّ الإغلاق يغلقها
- الفتح يُعلَن في السجلّ
- الخلفية منسّقة بـ ::backdrop
- إعادة الفتح والإغلاق تعمل مرارًا