איך יוצרים רשימה נפתחת ב-HTML
רשימה נפתחת היא אלמנט <select> עם <option> לכל בחירה. ה-value של כל אפשרות הוא מה שהטופס שולח; הטקסט שבין התגיות הוא מה שהקורא רואה. בחרו אחת ולחצו על Submit:
הטופס שולח language=js: ה-name של ה-select וה-value של האפשרות שנבחרה. selected קובע את ברירת המחדל; בלעדיו, האפשרות הראשונה נבחרת. אם לאפשרות אין value, הטקסט שלה נשלח במקום.
חברו את התווית ל-select עם for ו-id (או בעטיפה) כדי שלחיצה על התווית תעביר את הפוקוס לרשימה וקוראי מסך יכריזו עליה.
המאפיינים של select ו-option
| אלמנט | מאפיין | מה עושה |
|---|---|---|
<select> | name | המפתח שתחתיו הערך נשלח |
<select> | required | חייבים לבחור אפשרות אמיתית, לא אפשרות placeholder ריקה ראשונה |
<select> | multiple | אפשר לבחור כמה אפשרויות |
<select> | size | כמה שורות גלויות (הופך אותו לתיבת רשימה) |
<select> | disabled | כל הרשימה מושבתת ולא נשלחת |
<option> | value | מה שנשלח כשהיא נבחרת |
<option> | selected | נבחרת כשהעמוד נטען |
<option> | disabled | מוצגת אבל אי אפשר לבחור בה |
<optgroup> | label | הכותרת של הקבוצה |
אפשרות placeholder עם required
ל-select תמיד יש ערך, כך שבלי placeholder האפשרות האמיתית הראשונה נשלחת גם אם הקורא לא נגע ברשימה. אפשרות ראשונה ריקה פותרת את זה, ו-required עוצר את השליחה עד שנבחרת אפשרות אמיתית:
לחצו על Continue לפני שבחרתם: הדפדפן מסרב ומבקש לבחור פריט. ל-placeholder יש value="", וזה מה ש-required מחשיב כריק, ו-disabled כדי שאי אפשר יהיה לבחור בו שוב אחרי שנבחרה מדינה.
קיבוץ אפשרויות עם optgroup
<optgroup label="..."> שם כותרת מעל קבוצת אפשרויות. אי אפשר לבחור בכותרת:
אי אפשר לקנן קבוצות: לרשימה יש רמה אחת של כותרות, לא יותר. disabled על <optgroup> משבית כל אפשרות בתוכו.
בחירה מרובה
multiple מאפשר לקורא לבחור כמה אפשרויות, והופך את הרשימה הנפתחת לתיבת רשימה. החזיקו Ctrl (Cmd ב-Mac) כדי להוסיף אפשרויות אחת אחת, או Shift כדי לבחור טווח:
הטופס שולח skills=html ו-skills=css: אותו שם פעם אחת לכל אפשרות שנבחרה. הרבה אנשים לא מכירים את מחוות Ctrl+לחיצה, אז לקומץ אפשרויות, קבוצה של תיבות סימון נוחה יותר לשימוש.
קריאה והגדרה של הערך ב-JavaScript
select.value קורא וקובע את הערך של האפשרות הנבחרת, והאירוע change נורה כשהקורא בוחר אפשרות אחרת. שימוש נפוץ הוא רשימה נפתחת שנייה שהאפשרויות שלה תלויות בראשונה:
new Option(text, value) יוצר אפשרות. select.selectedIndex הוא המיקום של האפשרות הנבחרת, ו-select.selectedOptions מפרט את האפשרויות הנבחרות, וכך קוראים select מרובה בחירות.
עיצוב select
הרשימה הפתוחה מצוירת על ידי הדפדפן ומערכת ההפעלה, ואפשר לעצב ממנה מעט מאוד. את התיבה הסגורה אפשר: appearance: none מסיר את החץ המקורי, ותמונת רקע שמה חץ משלכם במקומו:
ה-padding הנוסף בצד הסוף משאיר מקום לחץ כדי שטקסט ארוך של אפשרות לא יעבור מתחתיו. font: inherit חשוב כאן בדיוק כמו בכפתורים: selects משתמשים כברירת מחדל בגופן הטפסים הקטן של הדפדפן. האפשרויות ברשימה הפתוחה שומרות על המראה המקורי. Chrome יכול לעצב גם את הרשימה הפתוחה כשמצטרפים עם appearance: base-select; דפדפנים בלי התמיכה הזו מציגים את הרשימה המקורית. שליטה מלאה בכל מקום דורשת רכיב מותאם שבנוי עם ARIA, וזו עבודה רבה בהרבה משנראה כדי לעשות אותה נכון.
select, כפתורי רדיו או datalist?
| שימוש | מתי |
|---|---|
<select> | בחירה אחת מרשימה ארוכה, או כשהמקום מוגבל |
| כפתורי רדיו | בחירה אחת מתוך מעט אפשרויות שכולן צריכות להיות גלויות (ראו HTML radio button) |
<input> עם <datalist> | הצעות, אבל כל ערך מוקלד מותר |
טעויות נפוצות
- אין placeholder בבחירת חובה. האפשרות האמיתית הראשונה נשלחת גם אם הקורא אף פעם לא בחר בה.
- placeholder עם ערך אמיתי, כמו
value="none".requiredמחשיב אותו כבחירה תקינה. השתמשו ב-value="". - אפשרויות בלי
valueכשהטקסט ארוך או מתורגם. השרת מקבל את הטקסט הגלוי, שמשתנה לפי השפה. multipleלכמה אפשרויות בודדות. תיבות סימון נוחות יותר.- האזנה ל-
clickעל אפשרויות. השתמשו ב-changeעל ה-<select>; הוא נורה גם בשינויים מהמקלדת. - אין תווית. ל-select עם placeholder בלבד אין שם אחרי שנבחרת אפשרות.
שאלות נפוצות
איך יוצרים רשימה נפתחת ב-HTML?
משתמשים ב-<select> עם <option> אחד לכל בחירה: <select name="color"><option value="red">Red</option><option value="blue">Blue</option></select>. תנו ל-select name ו-<label>.
איך קובעים את אפשרות ברירת המחדל ב-select?
הוסיפו selected לאותה אפשרות: <option value="blue" selected>Blue</option>. בלעדיו, האפשרות הראשונה נבחרת. ב-JavaScript, הגדירו select.value = 'blue'.
איך מוסיפים placeholder ל-select?
הפכו את האפשרות הראשונה לריקה ולא ניתנת לבחירה: <option value="" disabled selected>Choose a country</option>. הוסיפו required ל-<select> כדי שאי אפשר יהיה לשלוח את הטופס עד שנבחרת אפשרות אמיתית.
איך קוראים את הערך הנבחר של select ב-JavaScript?
select.value הוא הערך של האפשרות הנבחרת. לטקסט הגלוי שלה השתמשו ב-select.selectedOptions[0].text, והאזינו לאירוע change כדי להגיב כשהבחירה משתנה. ל-select מרובה בחירות, עברו על select.selectedOptions.
מה ההבדל בין select ל-datalist?
<select> מאפשר רק את האפשרויות שברשימה. <input> עם <datalist> מציע אפשרויות בזמן שהקורא מקליד, אבל מקבל כל טקסט. השתמשו ב-select כשהתשובה חייבת להיות אחת מהאפשרויות שלכם.