במשך תקופה ארוכה, כדי להציג בוחר תאריכים, היה צריך להשתמש בספריות של ווידג'טים מותאמים אישית או בפתרונות עקיפים. פלטפורמת האינטרנט כוללת עכשיו את השיטה HTMLInputElement showPicker()
, שהיא דרך קנונית להצגת כלי לבחירת תאריכים, שעות, צבעים וקבצים בדפדפן.
רקע
בקשה נפוצה שאנחנו מקבלים ממפתחי אתרים היא:
איך אפשר להציג באופן פרוגרמטי
Stack Overflow
בוחר עבור רכיבי בקרה כמו תאריך?
התשובות הנוכחיות לא טובות במיוחד. הן מסתמכות על ספריות חיצוניות, על פריצות CSS או על התנהגויות ספציפיות של דפדפנים, כמו סימולציה של אינטראקציה של משתמש עם click()
.
אני שמח לבשר שהימים האלה יסתיימו בקרוב, כי פלטפורמת האינטרנט מציגה דרך קנונית להצגת כלי לבחירת דפדפן עבור רכיבי <input>
עם הסוגים הבאים: "date"
, "month"
, "week"
, "time"
, "datetime-local"
, "color"
ו-"file"
. היא פועלת גם עם רכיבי <input>
עם הצעות שמבוססות על <datalist>
או "autocomplete"
, שנסביר עליהם גם במאמר הזה.

איך מציגים כלי לבחירת תאריכים
כשמתקשרים אל showPicker()
ברכיב <input>
, מוצג למשתמש בורר דפדפן. צריך להפעיל אותה בתגובה לתנועת משתמש, כמו תנועת מגע או לחיצה על העכבר. אחרת, היא תיכשל עם חריגה מסוג NotAllowedError
.
מטעמי אבטחה, אם מתבצעת קריאה ל-API ב-iframe ממקורות שונים, הוא יחזיר חריגה מסוג SecurityError
.
בורר הדפדפנים מוצג כשהרכיב <input>
הוא אחד מהסוגים הבאים: "date"
, "month"
, "week"
, "time"
, "datetime-local"
, "color"
או "file"
.
בדוגמה שלמטה אפשר לראות איך פותחים את הכלי לבחירת תאריך בדפדפן.
<input type="date">
<button>Show the date picker</button>
<script>
const button = document.querySelector("button");
const dateInput = document.querySelector("input");
button.addEventListener("click", () => {
try {
dateInput.showPicker();
// A date picker is shown.
} catch (error) {
// Use external library when this fails.
}
});
</script>
יכול להיות שגם בבוחר הדפדפנים יופיעו פריטים מ-<datalist>
או מ-"autocomplete"
.
בדוגמה הבאה אפשר לראות איך פותחים את כלי הבחירה של הדפדפן באמצעות <datalist>
.
<datalist id="ice-cream-flavors">
<option value="Chocolate"> </option>
<option value="Coconut"> </option>
<option value="Mint"> </option>
<option value="Strawberry"> </option>
<option value="Vanilla"> </option>
</datalist>
<input type="text" list="ice-cream-flavors">
<button>Show the suggestions</button>
<script>
const button = document.querySelector("button");
const iceCreamFlavorsInput = document.querySelector("input");
button.addEventListener("click", () => {
try {
iceCreamFlavorsInput.showPicker();
// A picker containing some ice cream flavors is shown.
} catch (error) {
// Use external library when this fails.
}
});
</script>
זיהוי תכונות
כדי לבדוק אם יש תמיכה ב-showPicker()
, משתמשים בפקודה:
if ('showPicker' in HTMLInputElement.prototype) {
// showPicker() is supported.
}
הדגמה (דמו)
גרסת הדמו זמינה בכתובת https://cdpn.io/web-dot-dev/fullpage/LEVKVdr. תוכלו להתנסות בכל כלי הבחירה שנתמכים בדפדפן.
תמיכה בדפדפנים
showPicker()
זמין ב-Chrome 99 ואילך.
המאמרים הבאים
בזמן כתיבת המאמר הזה, showPicker()
היא תכונה חדשה בפלטפורמת האינטרנט. יכול להיות שבעתיד יהיה צורך בעבודה נוספת על התכונה:
- יכול להיות שנרצה להוסיף
showPicker()
דומה לרכיב<select>
בעתיד, אם מפתחי אתרים יבקשו זאת. - יכול להיות שהערך
closePicker()
יהיה שימושי, ואולי נוסיף אותו אם מפתחי אתרים יבקשו זאת. - אפשר להוסיף מדיניות הרשאות שמאפשרת ל-iframe ממקורות שונים להציג כלי לבחירת קבצים בדפדפן, אם שרשרת ההורה שלהם מאפשרת זאת.
משוב
צוות Chrome וקהילת תקני האינטרנט רוצים לשמוע על החוויות שלכם עם showPicker()
.
מתארים את העיצוב
האם יש משהו ב-showPicker()
שלא פועל כמו שציפית? או
האם חסרות שיטות או מאפיינים שצריך להטמיע כדי ליישם את הרעיון?
יש לך שאלה או הערה לגבי מודל האבטחה?
- אפשר להגיש בעיה במפרט במאגר WHATWG GitHub, או להוסיף את המחשבות שלכם לבעיה קיימת.
בעיה בהטמעה?
מצאתם באג בהטמעה של Chrome? או שההטמעה שונה מהמפרט?
- מדווחים על באג בכתובת https://new.crbug.com. חשוב לכלול כמה שיותר פרטים והוראות פשוטות לשחזור הבאג.
תמיכה ביוצרים
מתכננים להשתמש ב-showPicker()
? התמיכה הציבורית שלכם עוזרת לצוות Chrome לקבוע את סדר העדיפויות של התכונות, ומראה לספקי דפדפנים אחרים עד כמה חשוב לתמוך בהן.
אתם יכולים לשלוח ציוץ אל @ChromiumDev ולספר לנו איפה ואיך אתם משתמשים בו.
קישורים שימושיים
- מסמכי התיעוד של MDN
- הסבר של WHATWG
- מפרט WHATWG
- בדיקת תגים
- הדגמה | מקור ההדגמה
- באג ב-Chromium
- ערך ב-ChromeStatus.com
תודות
תודה לג'ו מדלי על בדיקת המאמר הזה. תמונה של יומן מאת Eric Rothermel ב-Unsplash.