انتقل إلى محتوى الدرس
الدرس 38
دورة بوتستراب 5

التحقق من صحة النماذج في بوتستراب 5Bootstrap 5 Form Validation

طبّق التحقق المتاح من صحة النماذج في بوتستراب 5 عبر دمج novalidate ودالة checkValidity وكلاس was-validated، ورسائل التغذية الراجعة وتلميحات الخطأ وتحقق الخادم.
أقسام الدرس
7
الأمثلة
4
اللغة
العربية
تاريخ النشر
غير محدد
المشاهدات
1
محتوى الدرس
في هذا الدرس 7تصفّح المواضيع

تمتلك متصفحات الويب الحديثة محرك تحقق أصيل يُعرف بواجهة قيود التحقق في HTML5 عبر سمات مثل required وminlength وtype="email" وpattern، غير أن الفقاعات التنبيهية الافتراضية التي يطلقها المتصفح تعاني من عيبين أساسيين: تباين شكلها ولغتها بين المتصفحات، واستحالة تنسيقها عبر CSS.

يمنحك Bootstrap 5 أفضل ما في العالمين: أضف السمة المنطقية novalidate والكلاس الاصطلاحي .needs-validation إلى وسم <form> لإخفاء فقاعات المتصفح المزعجة، مع الإبقاء الكامل على فحص القيود البرمجي في الذاكرة ليقرأه بوتستراب ويعرض رسائلك المنسقة الأنيقة بدلاً منها.

HTML
<form class="needs-validation" novalidate>
  <div class="mb-3">
    <label for="em" class="form-label">Work Email</label>
    <input type="email" class="form-control" id="em"
           required>
    <div class="invalid-feedback">Enter valid email.</div>
  </div>
  <button class="btn btn-primary" type="submit">Go</button>
</form>

لو وضعنا كلاس .was-validated على النموذج منذ لحظة فتح الصفحة، لظهرت جميع الحقول الفارغة المطلوبة باللون الأحمر المزعج قبل أن يلمس المستخدم لوحة المفاتيح! لذلك تقتضي الممارسة القياسية في Bootstrap 5 الاستماع لحدث submit على جميع نماذج .needs-validation، وفحص صحة القيود عبر الدالة الأصيلة form.checkValidity().

فإذا أعادت الدالة false نوقف الإرسال فوراً عبر event.preventDefault() وevent.stopPropagation()، ثم نضيف الكلاس .was-validated ليبدأ المتصفح بتحديث الألوان والرسائل حياً مع كل حرف يصححه المستخدم.

مخطط يوضح دورة التحقق المتكاملة في بوتستراب 5 من novalidate وwas-validated في المتصفح حتى is-invalid من الخادم

يعرض بوتستراب نصوص التوجيه الشرطية عبر عنصرين شقيقين يوضعان بعد حقل الإدخال مباشرة: <div class="invalid-feedback"> لشرح خطأ الإدخال وكيفية إصلاحه بلغة بشرية واضحة، و<div class="valid-feedback"> الاختياري لطمأنة المستخدم عند استيفاء الشروط.

يبقى كلا العنصرين مخفيين بـ display: none في الوضع الطبيعي، ولا يظهر أحدهما إلا عندما يحمل النموذج الأب .was-validated (فيتفاعل مع حالتَي :invalid و:valid الأصيلتين) أو عندما يحمل الحقل نفسه كلاس حالة صريحاً.

HTML
const selector = '.needs-validation';
document.querySelectorAll(selector).forEach((form) => {
  form.addEventListener('submit', (e) => {
    if (!form.checkValidity()) {
      e.preventDefault();
      e.stopPropagation();
    }
    form.classList.add('was-validated');
  });
});

هناك أخطاء يستحيل على المتصفح اكتشافها بمفرده مثل «اسم المستخدم محجوز مسبقاً في قاعدة البيانات» أو «انتهت صلاحية رمز الدعوة». عند عودة الرد من الخادم (سواء بإعادة تحميل الصفحة في Laravel أو عبر طلب AJAX)، نستخدم الكلاسين الصريحين .is-invalid و.is-valid مباشرة على الحقول المعنية دون الحاجة لسمة novalidate أو كلاس .was-validated.

HTML
<div class="mb-3">
  <label for="srvName" class="form-label">Handle</label>
  <input type="text" class="form-control is-invalid"
         id="srvName" value="admin"
         aria-describedby="srvErr" aria-invalid="true">
  <div id="srvErr" class="invalid-feedback">
    This handle is already reserved.
  </div>
</div>

ينطبق نظام التحقق ذاته على مربعات الموافقة الإلزامية ومجموعات الإدخال المدمجة: ففي حالة .form-check يوضع عنصر .invalid-feedback داخل حاوية .form-check نفسها بعد وسم <label> مباشرًة ليتلون نص الموافقة والمربع بالأحمر مع إظهار الرسالة تحتها. أما في حالة .input-group فيُضاف الكلاس المساعد .has-validation على الحاوية الأب لضمان بقاء الزوايا الخارجية مستديرة بجمالية تامة.

في أشرطة الأدوات الضيقة أو الصفوف الأفقية المكتظة التي لا تحتمل إزاحة العناصر السفلية عند ظهور سطر خطأ جديد، يمكنك استبدال .invalid-feedback و.valid-feedback بالكلاسين العائمين .invalid-tooltip و.valid-tooltip، بشرط منح العنصر الأب المباشر للحقل الكلاس .position-relative ليعمل كمرجع تموضع مطلق للتلميح.

اختبر الأنواع الأربعة للتحقق التفاعلي وتلميحات الخطأ في المختبر الحي التالي:

القاعدة الذهبية في هندسة الويب الاحترافية لا تقبل المساومة: التحقق في المتصفح وُجد لتحسين تجربة المستخدم وسرعة استجابته فقط، وليس جدار حماية أمنياً على الإطلاق! فأي مستخدم يستطيع فتح أدوات المطور في المتصفح وحذف سمة required، أو إرسال طلب HTTP POST خام مباشرة عبر سطر الأوامر متجاوزاً الصفحة بأكملها.

لذلك يجب دائماً تنفيذ قواعد التحقق والتعقيم الصارمة على الخادم الخلفي أولاً، ثم إرجاع أخطاء الحقول وعرضها للمستخدم عبر .is-invalid و.invalid-feedback بتناغم كامل.

HTML
<div class="input-group has-validation mb-4">
  <span class="input-group-text">@</span>
  <input type="text" class="form-control is-invalid"
         required>
  <div class="invalid-feedback">Username required.</div>
</div>
<div class="position-relative pb-4">
  <input type="text" class="form-control is-invalid">
  <div class="invalid-tooltip">Invalid API key!</div>
</div>

يجمع الجدول المرجعي الشامل التالي كافة كلاسات وسمات ودوال التحقق من النماذج في Bootstrap 5.3:

الكلاس أو السمة أو الدالةالعنصر المستهدفالوظيفة المعمارية في دورة التحقق
novalidateوسم <form>إيقاف فقاعات تنبيه المتصفح الافتراضية مع بقاء فحص القيود البرمجي نشطاً
.was-validatedوسم <form> بعد الإرسالتفعيل أنماط :valid و:invalid على كافة حقول النموذج
form.checkValidity()دالة DOM في JSإرجاع true إذا استوفت جميع الحقول شروطها أو false عند وجود خطأ
.is-valid / .is-invalidعنصر الحقل مباشرةتمثيل نتيجة تحقق الخادم أو التحقق المخصص لكل حقل على حدة
.valid / invalid-feedbackشقيق بعد الحقلإظهار نص التوجيه الأخضر أو رسالة الخطأ الحمراء أسفل الحقل
.has-validationحاوية .input-groupالحفاظ على استدارة الزوايا الخارجية عند إلحاق رسالة تحقق بالمجموعة
.valid / invalid-tooltipداخل أب .position-relativeإظهار تلميح عائم فوق السطر دون إزاحة عناصر التخطيط السفلية
خلاصة المعرفة ومحطة الانتقال

ملخص الدرس

حصاد الدرس

مراجعة مركّزة لأهم المفاهيم والقواعد الهندسية التي أتقنتها في هذا الدرس قبل التطبيق العملي

ماذا تعلّمت في هذا الدرس؟

اختتمت في هذا الدرس الموديول السادس بإتقان دورة التحقق الكاملة في بوتستراب 5: تعطيل فقاعات المتصفح عبر novalidate، وتفعيل .was-validated بدالة checkValidity()، وعرض رسائل التغذية الراجعة وتلميحات الخطأ العائمة ونتائج الخادم .is-invalid مع احترام الحد الأمني للخادم. الخطوة التالية: انتقل الآن إلى الموديول السابع ومكوّنات بوتستراب التفاعلية للبدء بدرس «الطي والأكورديون في بوتستراب 5»!

مشاركة

هل كان هذا الدرس مفيدًا؟

جارٍ تحميل الآراء…

ابنِ لغتك البرمجية

المصطلحات4

راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.

0 / 4 مفهومةأول بطاقة، أول خطوة
01 Constraint Validation API واجهة فحص القيود الأصيلة
الدوال البرمجية المدمجة في المتصفح مثل checkValidity() لفحص شروط الحقول المطلوبة والصيغ القياسية.
للمراجعة
02 Post-Submit Validation Class كلاس التفعيل بعد الإرسال
الكلاس .was-validated الذي يضاف للنموذج عند محاولة الإرسال لإظهار ألوان ورسائل التحقق دون إزعاج مسبق.
للمراجعة
03 Server Validation State Class كلاس حالة تحقق الخادم
الكلاسان الصريحان .is-invalid و.is-valid الموضوعان على الحقول لعرض نتائج الفحص العائدة من الخادم.
للمراجعة
04 Validation Tooltip تلميح التحقق العائم
صندوق رسالة عائم يظهر فوق المساحة المحيطة دون إزاحة عناصر الصفحة بفضل وجود .position-relative على الأب.
للمراجعة

اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.

حروف قليلة. معنى كامل.

الاختصارات4

راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.

0 / 4 مفهومةأول بطاقة، أول خطوة
01 API API
Application Programming Interface
واجهة برمجة التطبيقات — توفر دالة الفحص القياسية checkValidity() على عناصر النماذج في المتصفح.
للمراجعة
02 WCAG WCAG
Web Content Accessibility Guidelines
إرشادات إتاحة محتوى الويب — توجب عدم الاعتماد على اللون وحده لإظهار الخطأ وربط رسائل الرفض بقارئات الشاشة.
للمراجعة
03 HTTP HTTP
HyperText Transfer Protocol
بروتوكول نقل النص الفائق — يمكن إرسال طلبات مباشرة عبره متجاوزة المتصفح، ولذا يظل التحقق على الخادم إلزامياً دائماً.
للمراجعة
04 AJAX AJAX
Asynchronous JavaScript and XML
جافاسكريبت غير المتزامنة — تُستخدم لتبديل كلاس .is-invalid وعرض رسائل خطأ الخادم ديناميكياً دون إعادة تحميل الصفحة.
للمراجعة

اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.

من الفهم للتطبيق

مهامك قبل الاختبار

خطوة صغيرة كل مرة. وإنجاز تقدر ترجع له.

0/2مهام منجزة
  1. أنشئ نموذجاً بكلاس needs-validation وسمة novalidate يضم بريداً مطلوباً واسم مستخدم مقيداً بـ pattern مع رسائل .invalid-feedback وكود جافاسكريبت يضيف .was-validated عند الإرسال.

  2. صمّم حاوية .input-group.has-validation بحقل .is-invalid ورسالة .invalid-feedback، مع عمود .position-relative يعرض تلميح خطأ عائم .invalid-tooltip.

تأشير المهمة إقرار منك بإتمامها، وليس تصحيحًا آليًا للكود. يُحفظ تقدمك في حسابك.

مساحة التحدي

اختبر فهمك.
ووصلها للإتقان.

كل سؤال خطوة لقدّام. اختار، اكتب كود، وشوف نتيجتك فورًا.

8أسئلة 2أنواع تحديات 100%هدف الإتقان
تصحيح تلقائي. فرص بلا حدود.

أكمل المهام، واجمع كل الإجابات الصحيحة. أقل من 100%؟ راجع وأعد المحاولة.

الأسئلة متاحة للاطلاع. سجّل الدخول للتفاعل وحفظ تقدمك.

لمحة عن التحدي8 أسئلة تنتظرك
01

ما الوظيفة الدقيقة لإضافة السمة novalidate إلى وسم <form class="needs-validation">؟

02

متى يجب إضافة الكلاس .was-validated إلى النموذج في التحقق من جانب العميل؟

03

ما الكلاسان المخصصان لتمثيل نتائج التحقق العائدة من الخادم على الحقول الفردية مباشرة دون .was-validated؟

04

لماذا تجب إضافة الكلاس .has-validation إلى حاوية .input-group التي تنتهي بعنصر رسالة .invalid-feedback؟

05

ما كلاس التموضع الواجب إضافته إلى العنصر الأب المباشر عند استخدام التلميحات العائمة .invalid-tooltip؟

06

تفعيل التحقق في المتصفح عبر سمات required ودالة checkValidity() يُغني تماماً عن التحقق من المدخلات على الخادم.

07

يُرفق بوتستراب 5 أيقونات SVG لعلامة الصح والتعجب مع ألوان الإطار لتمكين المصابين بعمى الألوان من تمييز حالة الحقل.

08

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