Kodax

النماذج - الجزء الثاني — أساسيات HTML

النماذج — الجزء الثاني

مربعات الاختيار (checkbox)

لخيارات مستقلة، يمكن تحديد أي عدد منها:

<fieldset>
    <legend>المواضيع التي تهمك</legend>
    <label><input type="checkbox" name="topics" value="web"> تطوير الويب</label>
    <label><input type="checkbox" name="topics" value="ai" checked> الذكاء الاصطناعي</label>
    <label><input type="checkbox" name="topics" value="security"> الأمن السيبراني</label>
</fieldset>

- value هو ما يُرسل (بدونه يُرسل "on").

- checked محدد مسبقاً.

- المربع غير المحدد لا يُرسل إطلاقاً.

أزرار الراديو (radio)

لاختيار واحد فقط من مجموعة. ما يجعلها مجموعة هو نفس name:

<fieldset>
    <legend>مستوى خبرتك</legend>
    <label><input type="radio" name="level" value="beginner" required> مبتدئ</label>
    <label><input type="radio" name="level" value="intermediate"> متوسط</label>
    <label><input type="radio" name="level" value="advanced"> متقدم</label>
</fieldset>

- اختلاف name بالخطأ يجعل كل زر مستقلاً ويمكن تحديدها كلها.

- required على زر واحد من المجموعة يكفي.

fieldset و legend

يجمعان الحقول المترابطة، و <legend> هو سؤال المجموعة. بدونهما يسمع مستخدم قارئ الشاشة "مبتدئ، زر اختيار" دون أن يعرف ما السؤال. استخدمهما دائماً مع مجموعات radio و checkbox.

ربط آخر للـ label: وضع الحقل داخل <label> (كما أعلاه) يغني عن for و id.

القائمة المنسدلة (select)

<label for="city">المدينة</label>
<select id="city" name="city" required>
    <option value="">— اختر —</option>
    <optgroup label="الوسط">
        <option value="baghdad">بغداد</option>
        <option value="karbala">كربلاء</option>
    </optgroup>
    <optgroup label="الجنوب">
        <option value="basra" selected>البصرة</option>
    </optgroup>
</select>

- خيار أول قيمته فارغة مع required يجبر المستخدم على الاختيار.

- multiple يسمح بعدة اختيارات (لكن تجربة استخدامه سيئة؛ checkboxes أوضح غالباً).

radio أم select؟ خيارات قليلة (2–5) ← radio (كلها ظاهرة). خيارات كثيرة ← select.

datalist: اقتراحات مع حرية الكتابة

<label for="lang">لغتك المفضلة</label>
<input type="text" id="lang" name="lang" list="langs">
<datalist id="langs">
    <option value="Python"></option>
    <option value="JavaScript"></option>
    <option value="C++"></option>
</datalist>

أنواع خاصة

| النوع | الاستخدام |

|---|---|

| date / time / datetime-local | منتقي تاريخ ووقت من المتصفح |

| file | رفع ملف: accept="image/*"، و multiple لعدة ملفات |

| range | شريط تمرير بقيمة تقريبية (min max step) |

| color | منتقي لون |

| hidden | قيمة تُرسل ولا تظهر (لا تضع فيها أسراراً: تظهر في المصدر) |

⚠️ رفع الملفات يتطلب أن يكون النموذج: method="post" و enctype="multipart/form-data"، وإلا يُرسل اسم الملف فقط.

disabled مقابل readonly

- readonly: لا يمكن التعديل لكن القيمة تُرسل.

- disabled: لا يمكن التفاعل والقيمة لا تُرسل.

تمرين

أنشئ نموذج "التسجيل في دورة": اختيار الدورة (select بمجموعات)، مستوى الخبرة (radio في fieldset)، أيام الحضور (checkboxes)، تاريخ البدء، ورفع صورة شخصية. تحقق من enctype.

<!DOCTYPE html>
<html lang="ar" dir="rtl">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>التسجيل في دورة</title>
</head>
<body>
    <h1>التسجيل في دورة</h1>
    <form action="/enroll" method="post" enctype="multipart/form-data">
        <p>
            <label for="course">الدورة</label>
            <select id="course" name="course" required>
                <option value="">— اختر دورة —</option>
                <optgroup label="الويب">
                    <option value="html">أساسيات HTML</option>
                    <option value="css">تصميم CSS</option>
                </optgroup>
                <optgroup label="البرمجة">
                    <option value="python">Python</option>
                </optgroup>
            </select>
        </p>

        <fieldset>
            <legend>مستوى خبرتك</legend>
            <label><input type="radio" name="level" value="beginner" required> مبتدئ</label>
            <label><input type="radio" name="level" value="intermediate"> متوسط</label>
        </fieldset>

        <fieldset>
            <legend>أيام الحضور</legend>
            <label><input type="checkbox" name="days" value="sun"> الأحد</label>
            <label><input type="checkbox" name="days" value="tue"> الثلاثاء</label>
            <label><input type="checkbox" name="days" value="thu"> الخميس</label>
        </fieldset>

        <p>
            <label for="start">تاريخ البدء</label>
            <input type="date" id="start" name="start">
        </p>
        <p>
            <label for="photo">صورة شخصية</label>
            <input type="file" id="photo" name="photo" accept="image/*">
        </p>
        <button type="submit">تسجيل</button>
    </form>
</body>
</html>
اختبر فهمك