في هذا الدرس سوف
- تربط كل حقل بتسمية ظاهرة
- تختار أنواع حقول تساعد على الهواتف
- تستخدم التحقق المدمج وتعرف حدوده
form وlabel وname
يجمع <form> الحقول ويرسلها عند الإرسال. وتحدد action وجهة البيانات، وmethod طريقة إرسالها: get تضعها في العنوان (مناسبة للبحث)، وpost ترسلها في جسم الطلب (استخدمها لكل ما يغيّر البيانات أو كان خاصاً). وبدون action يُرسل النموذج إلى الصفحة الحالية.
كل حقل يحتاج إلى تسمية. فـ <label for="email">Email</label> يرتبط بـ <input id="email">. وعند النقر على التسمية يُفعَّل الحقل (هدف لمس أكبر على الهواتف)، وتقرأ قارئات الشاشة التسمية عند الوصول إلى الحقل. والنص التوضيحي placeholder ليس تسمية، فهو يختفي عند الكتابة وغالباً ما يكون باهتاً يصعب قراءته.
وname هو المفتاح الذي يرسله المتصفح مع القيمة، مثل email=ali@example.com. والحقل الذي لا يحمل name لا يُرسل أبداً، وهذا سبب شائع لمشكلة "النموذج لا يرسل شيئاً". وفي المحرر أدناه، يعرض الإرسال البيانات في وحدة التحكم.
وحدة التحكم
- تظهر هنا رسائل وحدة التحكم والأخطاء وبيانات النماذج والروابط التي تنقرها.
اضغط Send والحقول فارغة، وسيمنعك المتصفح. ثم املأها واضغط Send مرة أخرى، وستعرض وحدة التحكم ما سيُرسل بالضبط.
أنواع الحقول والاختيارات
تغيّر السمة type لوحة المفاتيح وطريقة التحقق. فـ email تعرض زر @ وتتحقق من الصيغة، وtel تعرض لوحة أرقام، وnumber لا تقبل إلا الأرقام (مع min وmax وstep)، وurl تتحقق من عنوان الويب، وdate تفتح منتقي التاريخ، وpassword تخفي الأحرف. وتوجد أيضاً search وcolor وrange وtime وfile.
لاختيار واحد من قائمة قصيرة استخدم أزرار الاختيار radio التي تشترك في name واحد، ولعدة اختيارات استخدم مربعات الاختيار checkbox. واجمعها داخل <fieldset> مع <legend> يطرح السؤال، لتقرأ قارئة الشاشة "التوصيل: عادي، زر اختيار". وللقوائم الطويلة مثل الدول استخدم <select> مع عناصر <option>.
والسمة autocomplete مثل autocomplete="email" أو "tel" تسمح للمتصفحات بتعبئة البيانات المحفوظة. وهي تجعل النماذج أسرع بكثير على الهواتف، وجزء من إرشادات الوصول WCAG.
وحدة التحكم
- تظهر هنا رسائل وحدة التحكم والأخطاء وبيانات النماذج والروابط التي تنقرها.
التحقق المدمج، ولماذا يجب أن يتحقق الخادم أيضاً
تمنع required الإرسال الفارغ، وتحدد minlength وmaxlength طول النص، وmin وmax حدود الأرقام والتواريخ، وتأخذ pattern تعبيراً نمطياً مثل pattern="[0-9]{6}" لرمز من ستة أرقام. ويعرض المتصفح رسالته الخاصة بلغة الزائر ويركّز على أول حقل خاطئ.
لكن تحقق المتصفح للراحة فقط. فأي شخص يستطيع تعطيله أو إرسال البيانات إلى خادمك مباشرة دون النموذج. لذلك يجب التحقق من كل قاعدة مرة أخرى على الخادم قبل حفظ البيانات أو العمل بها، وتشرح دورتا Node.js والأمان كيفية ذلك.
استخدم <button type="submit"> للإجراء الرئيسي. والزر <button> داخل النموذج يرسله افتراضياً، لذا يحتاج الزر الذي يفعل شيئاً آخر، مثل "إظهار كلمة المرور"، إلى type="button".
أخطاء شائعة
النص التوضيحي بدلاً من التسمية
الحقل الذي فيه نص توضيحي فقط لا يملك تسمية دائمة. فينسى الناس غرض المربع بعد الكتابة، وقد لا تعلنه قارئات الشاشة. أضف
<label>دائماً.نسيان name
الحقول التي لا تحمل
nameتُستبعد بصمت من البيانات المرسلة. راقب وحدة التحكم في المحرر أعلاه لترى ذلك.الثقة بتحقق المتصفح
يمكن تجاوز
requiredوpatternفي ثوانٍ. تحقق مرة أخرى على الخادم في كل مرة.
تمرين
أنشئ نموذج حجز: حقل اسم إلزامي وحقل بريد (type="email")، ولكل منهما label مطابق، ثم fieldset فيه legend وزرا اختيار يشتركان في name واحد، وزر إرسال. وكل حقل يحتاج إلى name.
وحدة التحكم
- تظهر هنا رسائل وحدة التحكم والأخطاء وبيانات النماذج والروابط التي تنقرها.
- تسميتان على الأقل مرتبطتان بـ
for - حقل فيه
required - حقل بريد مع
type="email" fieldsetفيهlegend- زرا اختيار يحملان
name - كل حقل يحمل
name - زر إرسال
اعرض حلاً ممكناً
<form method="post">
<p><label for="n">Name</label><br>
<input id="n" name="name" required></p>
<p><label for="e">Email</label><br>
<input id="e" name="email" type="email" required></p>
<fieldset>
<legend>Session</legend>
<label><input type="radio" name="session" value="morning" required> Morning</label>
<label><input type="radio" name="session" value="evening"> Evening</label>
</fieldset>
<button type="submit">Book</button>
</form>اختبار سريع
أنهيت الدرس؟
أسئلة يطرحها الناس
هل تستطيع HTML إرسال بيانات النموذج إلى بريدي دون خادم؟
ليس بشكل موثوق. فـ action="mailto:..." يفتح تطبيق البريد لدى الزائر فقط ويفشل لدى كثير من الناس. وتحتاج إلى شيء على خادم، خادمك أو خدمة نماذج، لاستقبال البيانات وإرسال البريد.
كيف أغيّر رسالة التحقق في المتصفح؟
باستخدام JavaScript: تحدد setCustomValidity() رسالتك الخاصة، وتضيف السمة title تلميحاً يظهر مع أخطاء pattern في بعض المتصفحات. وكثير من المواقع تعرض رسالتها الخاصة بجانب الحقل بدلاً من ذلك.
هل أستخدم GET أم POST؟
استخدم GET للبحث والتصفية، لأن النتيجة يمكن حفظها ومشاركتها. واستخدم POST لتسجيل الدخول والدفع والرسائل وكل ما ينشئ بيانات أو يغيّرها، حتى لا تُحفظ في العنوان وسجل المتصفح.
كيف أقبل الأسماء العربية والإنجليزية في حقل واحد؟
استخدم حقل نص عادياً دون pattern يقيّد الأحرف، وأضف dir="auto" ليتبع اتجاه النص ما يكتبه الشخص. وتجنب قواعد مثل "الأحرف من A إلى Z فقط" لأنها ترفض أسماء حقيقية.
هل حقل التاريخ موثوق في كل المتصفحات؟
type="date" مدعوم في كل المتصفحات الرئيسية الحالية. ويبدو المنتقي مختلفاً في كل منها، وتُرسل القيمة دائماً بالصيغة YYYY-MM-DD أياً كانت الصيغة التي يراها الزائر.
المصادر
روجعت المعلومات في هذا الدرس وفق هذه الصفحات الرسمية بتاريخ 20 أكتوبر 2026.
تبقى أمثلة الشيفرة بالإنجليزية وتعمل في بيئة معزولة على جهازك. والنص العربي بانتظار المراجعة من متحدث أصلي. وإذا لاحظت خطأ فأخبرنا عبر صفحة التواصل.