النماذج في HTML: form و input و label
كل ما تعلمته حتى الآن يسير في اتجاه واحد: الموقع يعرض، والزائر يقرأ. لكن ماذا لو أردت أن يكتب الزائر شيئاً؟ تسجيل الدخول، والبحث، ونموذج «اتصل بنا»، وطلب منتج: كلها نماذج (Forms). في هذا الدرس ستتعلم بناء النماذج بالطريقة الصحيحة والمريحة للمستخدم.
الوسم form
Section titled “الوسم form”النموذج مثل استمارة ورقية في مكتب حكومي: فيها خانات تملؤها، وزر «إرسال» في آخرها. في HTML، الاستمارة كلها داخل <form>:
<form action="/subscribe" method="post"> <!-- الحقول هنا --></form>action: العنوان الذي ستُرسل إليه البيانات، وهو عادة برنامج على الخادم يعالجها.method: طريقة الإرسال.getتضع البيانات في الرابط نفسه (مناسبة للبحث)، وpostترسلها بشكل غير ظاهر في الرابط (مناسبة لكلمات المرور والبيانات الشخصية).
حقل الإدخال input و label
Section titled “حقل الإدخال input و label”أهم وسم في النماذج هو <input>، وهو وسم فارغ يتغير شكله حسب الخاصية type. ومعه دائماً <label> الذي يكتب اسم الحقل:
<label for="username">اسم المستخدم</label><input type="text" id="username" name="username">الربط بين الاثنين يتم بأن تكون قيمة for في الـ label هي نفس id الحقل. لماذا هذا مهم؟
- عند الضغط على النص «اسم المستخدم» ينتقل المؤشر للحقل تلقائياً، وهذا مريح جداً على الموبايل.
- قارئات الشاشة تقرأ اسم الحقل عندما يصل إليه الكفيف.
أما الخاصية name فهي اسم البيانات عند إرسالها. لو كتب الزائر «sara»، يستقبل الخادم username=sara. الحقل الذي ليس له name لا تُرسل قيمته أبداً.
أنواع الحقول
Section titled “أنواع الحقول”| النوع | الاستخدام | ميزة إضافية |
|---|---|---|
type="text" |
نص قصير | الافتراضي |
type="email" |
بريد إلكتروني | يتحقق من وجود @ |
type="password" |
كلمة مرور | يخفي الحروف بنقاط |
type="number" |
رقم | يمنع الحروف، ويقبل min و max |
type="date" |
تاريخ | يظهر تقويماً لاختيار اليوم |
type="checkbox" |
مربع اختيار | يمكن اختيار أكثر من واحد |
type="radio" |
زر اختيار | اختيار واحد فقط من مجموعة |
ميزة رائعة على الموبايل: الحقل من نوع email يُظهر لوحة مفاتيح فيها علامة @، و number يُظهر لوحة الأرقام. اختيار النوع الصحيح يريح المستخدم.
أزرار الاختيار radio و checkbox
Section titled “أزرار الاختيار radio و checkbox”أزرار radio التي لها نفس name تصبح مجموعة واحدة، لا يمكن اختيار أكثر من زر فيها، مثل أسئلة الاختيار من متعدد:
<p>مستواك في البرمجة:</p><input type="radio" id="beginner" name="level" value="beginner"><label for="beginner">مبتدئ</label>
<input type="radio" id="middle" name="level" value="middle"><label for="middle">متوسط</label>الخاصية value هي ما يُرسل للخادم عند اختيار هذا الزر. أما checkbox فكل مربع مستقل، ويمكن اختيار أي عدد منها.
نص طويل textarea وقائمة منسدلة select
Section titled “نص طويل textarea وقائمة منسدلة select”للرسائل الطويلة استخدم <textarea>، وله وسم إغلاق على عكس <input>:
<label for="message">رسالتك</label><textarea id="message" name="message" rows="4"></textarea>ولاختيار عنصر من قائمة طويلة، مثل الدولة، استخدم <select> وبداخله <option>:
<label for="country">الدولة</label><select id="country" name="country"> <option value="eg">مصر</option> <option value="sa">السعودية</option> <option value="ma">المغرب</option></select>زر الإرسال
Section titled “زر الإرسال”<button type="submit">إرسال</button>الضغط عليه يرسل النموذج إلى العنوان المكتوب في action. والضغط على Enter داخل أي حقل نصي يفعل الشيء نفسه.
التحقق التلقائي من البيانات
Section titled “التحقق التلقائي من البيانات”يمكنك أن تطلب من المتصفح فحص البيانات قبل الإرسال، دون أي سطر JavaScript:
<input type="number" id="age" name="age" min="13" max="99"><input type="text" id="code" name="code" minlength="4" maxlength="8">required: الحقل إجباري، ولن يُرسل النموذج وهو فارغ.minوmax: أصغر وأكبر رقم مسموح.minlengthوmaxlength: أقل وأكثر عدد من الحروف.placeholder: نص رمادي مثال يظهر داخل الحقل الفارغ ويختفي عند الكتابة.
جرّب بنفسك
Section titled “جرّب بنفسك”هذا نموذج تسجيل في دورة. املأ الحقول وجرّب الكتابة والاختيار. صندوق التجربة معزول ولا يرسل البيانات فعلياً، لذلك جرّب زر الإرسال والتحقق التلقائي في ملف على جهازك:
الناتج
أخطاء شائعة
Section titled “أخطاء شائعة”- نسيان الخاصية name: الحقل يظهر ويعمل، لكن قيمته لا تصل للخادم أبداً.
- label غير مربوط بالحقل: اختلاف قيمة
forعنidيجعل الضغط على الاسم بلا فائدة ويربك قارئات الشاشة. - أزرار radio بأسماء مختلفة: إذا اختلف
nameبينها، يستطيع المستخدم اختيار كل الأزرار معاً. المجموعة الواحدة لهاnameواحد.
اختبر نفسك
Section titled “اختبر نفسك”سؤال
كيف تربط label بحقل الإدخال الخاص به؟
الربط يتم بـ for و id المتطابقين، أما name فهو اسم البيانات عند الإرسال.
سؤال
تريد أن يختار الطالب إجابة واحدة فقط من أربع إجابات. أي نوع تستخدم؟
أزرار radio التي تشترك في نفس name تسمح باختيار واحد فقط من المجموعة.
الخلاصة
Section titled “الخلاصة”- النموذج داخل
<form>، وactionوجهة البيانات، وmethodطريقة الإرسال. <input>يتغير بالخاصيةtype، ومعه دائماً<label>مربوط بـforوid.nameاسم البيانات عند الإرسال، وvalueقيمة الاختيار في radio و checkbox و option.<textarea>للنص الطويل، و<select>للقائمة المنسدلة، و<button type="submit">للإرسال.requiredوminوmaxوminlengthتحقق تلقائي بدون JavaScript.