عناصر النماذج المتقدمة في HTML
في درس النماذج بنيت نموذجاً بالحقول الأساسية: نص وبريد وكلمة مرور وقائمة منسدلة. لكن HTML تقدّم أكثر من ذلك بكثير: شريط تمرير، ومنتقي ألوان، ورفع ملفات، واقتراحات أثناء الكتابة. كل هذا جاهز في المتصفح بلا سطر JavaScript. في هذا الدرس ستكمل أدواتك لبناء أي نموذج.
أنواع أخرى من input
Section titled “أنواع أخرى من input”| النوع | ماذا يُظهر؟ |
|---|---|
type="tel" |
حقل رقم هاتف، ويفتح لوحة الأرقام على الموبايل |
type="url" |
حقل رابط، ويتحقق أنه يبدأ بمثل https:// |
type="search" |
حقل بحث، وفيه غالباً زر صغير لمسح النص |
type="time" |
منتقي وقت بالساعات والدقائق |
type="color" |
مربع يفتح لوحة لاختيار لون |
type="range" |
شريط تمرير لاختيار قيمة بين حدّين |
type="file" |
زر لاختيار ملف من جهاز المستخدم |
<label for="phone">رقم الهاتف</label><input type="tel" id="phone" name="phone">
<label for="fav">لونك المفضل</label><input type="color" id="fav" name="fav" value="#5b5bf0">شريط التمرير: range
Section titled “شريط التمرير: range”<label for="volume">مستوى الصوت</label><input type="range" id="volume" name="volume" min="0" max="100" step="10" value="50">minوmax: أقل قيمة وأكبر قيمة.step: مقدار القفزة مع كل حركة. هنا تتغير القيمة عشرة عشرة.value: القيمة التي يبدأ بها الشريط.
والخاصية step تعمل أيضاً مع type="number". فالقيمة step="0.5" مثلاً تسمح بأنصاف الأعداد.
رفع الملفات: file
Section titled “رفع الملفات: file”<label for="photo">صورتك الشخصية</label><input type="file" id="photo" name="photo" accept="image/*">
<label for="docs">مستنداتك</label><input type="file" id="docs" name="docs" accept=".pdf" multiple>accept: أنواع الملفات التي تظهر للمستخدم عند الاختيار. القيمةimage/*تعني أي صورة، و.pdfملفات PDF فقط.multiple: تسمح باختيار أكثر من ملف.
اقتراحات أثناء الكتابة: datalist
Section titled “اقتراحات أثناء الكتابة: datalist”<datalist> قائمة اقتراحات تظهر تحت الحقل والمستخدم يكتب. وهو غير ملزم بها، فيستطيع أن يكتب قيمة أخرى:
<label for="city">المدينة</label><input type="text" id="city" name="city" list="cities">
<datalist id="cities"> <option value="القاهرة"> <option value="الإسكندرية"> <option value="الرياض"> <option value="عمّان"></datalist>الربط يتم بين الخاصية list في الحقل و id في القائمة. والفرق بينه وبين <select> أن select يجبرك على اختيار واحد من الموجود، و datalist يقترح فقط.
تجميع الحقول: fieldset و legend
Section titled “تجميع الحقول: fieldset و legend”النموذج الطويل يتعب العين. قسّمه إلى مجموعات لها عناوين:
<fieldset> <legend>بيانات الشحن</legend>
<label for="address">العنوان</label> <input type="text" id="address" name="address">
<label for="zip">الرمز البريدي</label> <input type="text" id="zip" name="zip"></fieldset><fieldset>يرسم إطاراً حول الحقول المترابطة.<legend>عنوان هذه المجموعة.
تخيّل استمارة ورقية حكومية: فيها مربع «البيانات الشخصية»، ومربع «بيانات السكن». هذا التقسيم يريح من يملأ الاستمارة، وقارئ الشاشة ينطق عنوان المجموعة قبل حقولها.
وأهم مكان لهما مع أزرار radio، لأن legend يحمل نص السؤال نفسه:
<fieldset> <legend>طريقة الدفع</legend> <input type="radio" id="cash" name="pay" value="cash"> <label for="cash">نقداً</label> <input type="radio" id="card" name="pay" value="card"> <label for="card">بطاقة</label></fieldset>تجميع خيارات القائمة: optgroup
Section titled “تجميع خيارات القائمة: optgroup”<select name="course"> <optgroup label="تطوير الويب"> <option>HTML</option> <option>CSS</option> </optgroup> <optgroup label="الموبايل"> <option>Flutter</option> </optgroup></select>خصائص تتحكم في الحقل
Section titled “خصائص تتحكم في الحقل”| الخاصية | تأثيرها |
|---|---|
disabled |
الحقل معطّل: لا يُعدَّل ولا تُرسَل قيمته |
readonly |
الحقل للقراءة فقط: لا يُعدَّل لكن قيمته تُرسَل |
autofocus |
المؤشر يقف في هذا الحقل عند فتح الصفحة |
checked |
مربع الاختيار أو زر radio مُحدَّد مسبقاً |
selected |
الخيار المحدَّد مسبقاً في select |
autocomplete |
نوع البيانات ليقترحها المتصفح، مثل email و name و tel |
pattern |
شكل النص المقبول |
<input type="text" name="username" value="sara_2026" readonly><input type="text" name="coupon" disabled><input type="email" name="email" autocomplete="email"><input type="text" name="code" pattern="[0-9]{4}" title="أربعة أرقام">القيمة [0-9]{4} في pattern تعني «أربعة أرقام بالضبط». هذه الصيغة تسمى التعبيرات النمطية، ويكفيك الآن أن تعرف أنها موجودة. واكتب معها title دائماً، لأن المتصفح يعرض نصه للمستخدم عندما يخطئ.
أنواع الأزرار
Section titled “أنواع الأزرار”| الكتابة | الوظيفة |
|---|---|
<button type="submit"> |
يرسل النموذج. وهو النوع الافتراضي داخل form |
<button type="reset"> |
يعيد كل الحقول إلى قيمها الأولى |
<button type="button"> |
لا يفعل شيئاً وحده، وتربطه بـ JavaScript |
جرّب بنفسك
Section titled “جرّب بنفسك”حرّك الشريط، واختر لوناً، واكتب حرفاً في حقل المدينة لترى الاقتراحات. ثم أضف مجموعة fieldset ثانية بعنوان «التواصل» فيها حقل هاتف من نوع tel:
الناتج
أخطاء شائعة
Section titled “أخطاء شائعة”- الخلط بين disabled و readonly: قيمة الحقل المعطّل بـ
disabledلا تصل إلى الخادم أبداً. إذا أردت عرض قيمة ثابتة وإرسالها فاستخدمreadonly. - نسيان type في الزر: أي
<button>داخلformيرسل النموذج. إذا كان الزر لشيء آخر فاكتبtype="button". - الاعتماد على تحقق المتصفح وحده:
requiredوpatternتساعد المستخدم، لكن أي شخص يستطيع تجاوزها. الفحص الحقيقي يتم على الخادم.
اختبر نفسك
Section titled “اختبر نفسك”سؤال
ما الفرق بين datalist و select؟
datalist قائمة اقتراحات لحقل نص عادي، أما select فلا يقبل إلا أحد الخيارات الموجودة.
سؤال
أي خاصية تجعل الحقل غير قابل للتعديل مع إرسال قيمته في النموذج؟
readonly تمنع التعديل وتُبقي القيمة ضمن بيانات النموذج، أما disabled فتستبعد الحقل من الإرسال.
الخلاصة
Section titled “الخلاصة”- للحقل أنواع كثيرة:
telوurlوsearchوtimeوcolorوrangeوfile. datalistيقترح قيماً لحقل النص دون أن يُلزم المستخدم بها.fieldsetوlegendيقسمان النموذج إلى مجموعات واضحة.disabledتعطّل الحقل ولا ترسله، وreadonlyتمنع تعديله وترسله.- حدّد
typeلكل زر:submitأوresetأوbutton.