كيف تنشئ مربع اختيار في HTML
مربع الاختيار هو <input type="checkbox">. ضعه داخل <label> مع نصه، كي يبدّله النقر على النص أيضًا. حدد مربعًا أو الاثنين واضغط Save لترى ما يرسله النموذج:
في الحالة الافتراضية يرسل النموذج updates=on فقط. قاعدتان تفسران ذلك:
- المربع المحدد يرسل
name=value. المربع الثاني بلاvalue، فيرسل القيمة الافتراضيةon. - المربع غير المحدد لا يرسل شيئًا على الإطلاق. لا
newsletter=noولا قيمة فارغة: الاسم غائب عن البيانات.
checked في HTML تحدد الحالة الابتدائية. ومثل كل سمة منطقية، وجودها هو ما يهم: checked="false" تحدد المربع مع ذلك.
سمات مربع الاختيار
| السمة | وظيفتها |
|---|---|
name | المفتاح الذي يُرسل حين يكون محددًا |
value | ما يُرسل حين يكون محددًا (الافتراضي on) |
checked | محدد عند تحميل الصفحة |
required | لن يُرسل النموذج حتى يُحدد هذا المربع |
disabled | لا يمكن تبديله ولا يُرسل |
مجموعة من مربعات الاختيار
لسؤال «اختر ما تشاء من هذه»، أعطِ كل المربعات الاسم name نفسه وقيمة value مختلفة. وضعها داخل <fieldset> مع <legend> كي يكون للمجموعة اسم:
يرسل النموذج topic=html وtopic=css: الاسم نفسه مرتين. معظم أطر الخوادم تقرأ ذلك كقائمة. PHP هو الاستثناء: يحتفظ بالأخير فقط ما لم ينتهِ الاسم بقوسين، name="topic[]". وفي JavaScript تُرجع new FormData(form).getAll('topic') القيمة ['html', 'css'].
إرسال قيمة حين يكون المربع غير محدد
حين يحتاج الخادم إلى «لا» صريحة، ضع حقلًا مخفيًا بالاسم نفسه قبل مربع الاختيار. حين يكون غير محدد تُرسل القيمة المخفية وحدها، وحين يكون محددًا تُرسل الاثنتان ويأخذ الخادم الأخيرة:
اضغط Continue: يرفض النموذج الإرسال حتى يُحدد مربع الشروط، لأنه required. بعدها يرسل marketing=no وterms=accepted، أو marketing=no وmarketing=yes وterms=accepted إن كان المربع الأول محددًا. أطر مثل Rails تولّد زوج الحقل المخفي هذا بالضبط. تحقق من طريقة قراءة خادمك للاسم المكرر قبل الاعتماد عليه.
تحديد الكل والحالة الوسطى
لمربع الاختيار مظهر ثالث، شرطة، يعني «بعضها لا كلها». هذه الحالة موجودة في JavaScript فقط: اضبط box.indeterminate = true. يستخدمها مربع «تحديد الكل» حين تكون بعض المربعات التي يتحكم بها محددة:
indeterminate تغيّر المظهر فقط (وما تعلنه قارئات الشاشة: «مختلط» أو «محدد جزئيًا»). يبقى المربع في الأساس محددًا أو غير محدد، وهذا ما يرسله النموذج. النقر على مربع في الحالة الوسطى يزيل الشرطة ويبدّله.
استخدم حدث change للاستجابة لمربع الاختيار، واقرأ box.checked لمعرفة حالته. box.value لا تتغير عند تبديل المربع.
تنسيق مربعات الاختيار
أسرع تغيير هو accent-color، الذي يعيد تلوين مربع الاختيار الأصلي ويحتفظ بكل سلوكه. ولمظهر مختلف تمامًا، يزيل appearance: none الرسم الأصلي ويتيح لك تنسيق الحقل كأي صندوق:
المربع المخصص ما زال مربع اختيار حقيقيًا: يتبدل بالنقر وبالمسافة، ويُرسل مع النموذج، ويُعلن عنه كمربع اختيار. ارسمه بـ :checked وأبقِ نمط :focus-visible، لأنه من دون الرسم الأصلي لا توجد حلقة تركيز لم تضفها بنفسك.
زر تبديل (Toggle)
المفتاح مربع اختيار يعني «مشغّل أو متوقف الآن» لا «ضمّن هذا». ارسمه بـ appearance: none وأضف role="switch" كي تعلن قارئات الشاشة عن مفتاح مشغّل أو متوقف بدلًا من مربع اختيار محدد:
inset-inline-start تضع المقبض ابتداءً من بداية السطر، فينزلق المفتاح في الاتجاه المعاكس في الصفحات المكتوبة من اليمين إلى اليسار، كما يجب. للخيارات المجمّعة التي لا يمكن اختيار إلا واحد منها، راجع زر الاختيار radio.
أخطاء شائعة
- توقع
falseللمربع غير المحدد. لا يُرسل شيء. عامِل الاسم الغائب كـ «متوقف» على الخادم، أو أضف الحقل المخفي. checked="false". تحدد المربع مع ذلك. احذف السمة.- مربع اختيار بلا تسمية، أو بجانبه نص ليس
<label>. يصبح المربع الصغير الهدف الوحيد للنقر، وتعلن قارئات الشاشة «مربع اختيار» بلا اسم. راجع label في HTML. - نسيان
value، فيرسل كل مربع في المجموعةonولا يستطيع الخادم التمييز بينها. - قراءة
box.valueلمعرفة إن كان محددًا. استخدمbox.checked. - مربعات اختيار لسؤال «اختر واحدًا». هذا ما وُجدت أزرار الاختيار من أجله.
الأسئلة الشائعة
كيف أنشئ مربع اختيار في HTML؟
استخدم <input type="checkbox"> داخل تسمية: <label><input type="checkbox" name="terms" value="yes"> I agree</label>. التسمية تجعل النص قابلًا للنقر أيضًا.
كيف أجعل مربع الاختيار محددًا افتراضيًا؟
أضف السمة checked: <input type="checkbox" name="news" checked>. وجودها هو ما يهم، لذلك checked="false" تحدده مع ذلك. وفي JavaScript اضبط box.checked = true أو false.
ما القيمة التي يرسلها مربع الاختيار غير المحدد؟
لا شيء. المربع غير المحدد يُستبعد كليًا من البيانات المرسلة. والمحدد يرسل value الخاصة به، أو on إن لم تكن له value. إذا احتاج الخادم إلى «لا» صريحة، فضع حقلًا مخفيًا بالاسم نفسه قبل مربع الاختيار.
كيف أحصل على قيمة مربع الاختيار في JavaScript؟
اقرأ box.checked، وهي true أو false. أما box.value فهي القيمة التي سيرسلها، وتبقى كما هي سواء كان المربع محددًا أم لا. استمع إلى حدث change لتستجيب عند تبديله.
كيف أغيّر لون مربع الاختيار؟
اضبط accent-color عليه: input[type=checkbox] { accent-color: #16a34a; }. ولمظهر مخصص بالكامل، اضبط appearance: none وارسم المربع وعلامة الصح بنفسك بـ CSS.