Menu

HTML checkbox: checked, ערכים, קבוצות ועיצוב מותאם

איך יוצרים תיבת סימון ב-HTML עם <input type="checkbox">: תוויות, המאפיין checked, מה הטופס שולח כשהיא מסומנת וכשהיא לא, קבוצות של תיבות סימון, בחירת הכל עם המצב indeterminate, ועיצוב.

בדף הזה יש עורכים שאפשר להריץ - לערוך, להריץ ולראות את הפלט מיד.

איך יוצרים תיבת סימון ב-HTML

תיבת סימון היא <input type="checkbox">. שימו אותה בתוך <label> עם הטקסט שלה, כך שגם לחיצה על הטקסט מחליפה את מצבה. סמנו תיבה אחת או את שתיהן ולחצו על Save כדי לראות מה הטופס שולח:

במצב ברירת המחדל הטופס שולח רק updates=on. שני כללים מסבירים את זה:

  • תיבה מסומנת שולחת name=value. לתיבה השנייה אין value, ולכן היא שולחת את ברירת המחדל, on.
  • תיבה לא מסומנת לא שולחת כלום. לא newsletter=no, לא ערך ריק: השם פשוט חסר בנתונים.

checked ב-HTML קובע את מצב ההתחלה. כמו כל מאפיין בוליאני, מה שקובע הוא הנוכחות שלו: checked="false" עדיין מסמן את התיבה.

מאפייני checkbox

מאפייןמה הוא עושה
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'].

שליחת ערך כשהתיבה לא מסומנת

כשהשרת צריך "לא" מפורש, שימו input מוסתר עם אותו שם לפני תיבת הסימון. כשהיא לא מסומנת, נשלח רק הערך המוסתר; כשהיא מסומנת, נשלחים שניהם והשרת לוקח את האחרון:

לחצו על Continue: הטופס מסרב עד שתסמנו את תיבת התנאים, כי היא required. אחר כך הוא שולח marketing=no ו-terms=accepted, או marketing=no, marketing=yes ו-terms=accepted כשהתיבה הראשונה מסומנת. פריימוורקים כמו Rails מייצרים בדיוק את זוג ה-input המוסתר הזה. בדקו איך השרת שלכם קורא שם שחוזר על עצמו לפני שאתם מסתמכים על זה.

בחירת הכל והמצב indeterminate

לתיבת סימון יש מראה שלישי, קו, עבור "חלק אבל לא הכל". הוא קיים רק ב-JavaScript: הגדירו box.indeterminate = true. תיבת "בחירת הכל" משתמשת בו כשחלק מהתיבות שהיא שולטת בהן מסומנות:

indeterminate משנה רק את המראה (ואת מה שקוראי מסך מכריזים: "mixed" או "partially checked"). מתחת לזה התיבה עדיין מסומנת או לא מסומנת, וזה מה שהטופס שולח. לחיצה על תיבה במצב indeterminate מנקה את הקו ומחליפה את מצבה.

השתמשו באירוע change כדי להגיב לתיבת סימון, וקראו את box.checked בשביל המצב שלה. box.value לא משתנה כשמצב התיבה מתחלף.

עיצוב תיבות סימון

השינוי המהיר ביותר הוא accent-color, שצובע מחדש את תיבת הסימון המקורית ושומר על כל ההתנהגות שלה. למראה שונה לגמרי, appearance: none מסיר את הציור המקורי ומאפשר לעצב את ה-input כמו כל תיבה:

התיבה המותאמת היא עדיין תיבת סימון אמיתית: היא מתחלפת בלחיצה וב-Space, נשלחת עם הטופס ומוכרזת כתיבת סימון. ציירו אותה עם :checked והשאירו סגנון :focus-visible, כי בלי הציור המקורי אין טבעת מיקוד שלא הוספתם בעצמכם.

מתג (toggle switch)

מתג הוא תיבת סימון שמשמעותה "פועל/כבוי עכשיו" ולא "לכלול את זה". ציירו אותו עם appearance: none והוסיפו role="switch" כדי שקוראי מסך יכריזו על מתג פועל או כבוי במקום על תיבת סימון מסומנת:

inset-inline-start ממקם את הידית מתחילת השורה, כך שבעמודים מימין לשמאל המתג מחליק לכיוון השני, כמו שצריך. לבחירות כן/לא מקובצות שבהן אפשר לבחור רק אחת, ראו HTML radio button.

טעויות נפוצות

  • ציפייה ל-false מתיבה לא מסומנת. לא נשלח כלום. טפלו בשם חסר כ"כבוי" בשרת, או הוסיפו את ה-input המוסתר.
  • checked="false". זה עדיין מסמן את התיבה. הסירו את המאפיין.
  • תיבת סימון בלי תווית, או עם טקסט לידה שאינו <label>. התיבה הקטנה הופכת למטרת הלחיצה היחידה וקוראי מסך מכריזים "checkbox" בלי שם. ראו HTML label.
  • שכחה של value, כך שכל תיבה בקבוצה שולחת on והשרת לא יכול להבחין ביניהן.
  • קריאה של box.value כדי לבדוק אם היא מסומנת. השתמשו ב-box.checked.
  • תיבות סימון ל"בחרו אחת". בשביל זה יש כפתורי רדיו.

שאלות נפוצות

איך יוצרים checkbox ב-HTML?

השתמשו ב-<input type="checkbox"> בתוך תווית: <label><input type="checkbox" name="terms" value="yes"> I agree</label>. התווית הופכת גם את הטקסט ללחיץ.

איך הופכים checkbox למסומן כברירת מחדל?

הוסיפו את המאפיין checked: <input type="checkbox" name="news" checked>. מה שקובע הוא עצם הנוכחות שלו, ולכן checked="false" עדיין מסמן אותה. ב-JavaScript, הגדירו box.checked = true או false.

איזה ערך שולחת תיבת סימון לא מסומנת?

שום ערך. תיבת סימון לא מסומנת לא נכללת בכלל בנתונים שנשלחים. תיבה מסומנת שולחת את ה-value שלה, או on אם אין לה value. אם השרת צריך "לא" מפורש, שימו input מוסתר עם אותו שם לפני תיבת הסימון.

איך מקבלים את הערך של checkbox ב-JavaScript?

קראו את box.checked, שהוא true או false. box.value הוא הערך שהיא הייתה שולחת, והוא נשאר זהה בין אם התיבה מסומנת ובין אם לא. האזינו לאירוע change כדי להגיב כשהיא מתחלפת.

איך משנים את הצבע של checkbox?

הגדירו עליה accent-color: input[type=checkbox] { accent-color: #16a34a; }. למראה מותאם לגמרי, הגדירו appearance: none וציירו את התיבה ואת סימן ה-V בעצמכם עם CSS.

איור של שפות התכנות ב-Coddy

ללמוד תכנות עם Coddy

להתחיל