Przez długi czas, aby wyświetlić selektor daty, trzeba było uciekać się do niestandardowych bibliotek widżetów lub hacków. Platforma internetowa zawiera teraz metodę HTMLInputElement showPicker()
, która jest kanonicznym sposobem wyświetlania selektora przeglądarki nie tylko dla dat, ale też czasu, kolorów i plików.
Tło
Częsty problem zgłaszany przez programistów internetowych:
Jak za pomocą kodu
Stack Overflow
wyświetlić selektor dla elementów sterujących, takich jak data?
Obecne odpowiedzi nie są najlepsze, ponieważ polegają na bibliotekach zewnętrznych, modyfikacjach kodu CSS lub określonych zachowaniach przeglądarki, takich jak symulowanie interakcji użytkownika z click()
.
Cieszymy się, że te czasy wkrótce się skończą, ponieważ platforma internetowa wprowadza kanoniczny sposób wyświetlania selektora przeglądarki dla elementów <input>
tych typów: "date"
, "month"
, "week"
, "time"
, "datetime-local"
, "color"
i "file"
. Funkcja ta będzie też działać w przypadku elementów <input>
z supozycjami generowanymi przez <datalist>
lub "autocomplete"
, co również omawiamy w tym artykule.
Jak wyświetlić selektor
Wywołanie funkcji showPicker()
w elemencie <input>
powoduje wyświetlenie użytkownikowi selektora przeglądarki. Musi być wywoływany w odpowiedzi na gest użytkownika, np. gest dotykowy lub kliknięcie myszką. W przeciwnym razie wywołanie zakończy się niepowodzeniem z wyjątkiem NotAllowedError
.
Ze względów bezpieczeństwa wywołanie tej metody w elemencie iframe z innej domeny spowoduje wyjątek SecurityError
.
Wyświetla się selektor przeglądarki, gdy element <input>
jest jednym z tych typów:"date"
, "month"
, "week"
, "time"
, "datetime-local"
, "color"
lub "file"
.
Przykład poniżej pokazuje, jak otworzyć selektor daty w przeglądarce.
<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>
Wybór przeglądarki można też wstępnie wypełnić elementami z <datalist>
lub "autocomplete"
.
Przykład poniżej pokazuje, jak otworzyć selektor przeglądarki za pomocą <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>
Wykrywanie cech
Aby sprawdzić, czy showPicker()
jest obsługiwane, użyj:
if ('showPicker' in HTMLInputElement.prototype) {
// showPicker() is supported.
}
Prezentacja
Wersję demonstracyjną znajdziesz pod adresem https://show-picker.glitch.me/demo.html. Możesz w niej wypróbować wszystkie selektory obsługiwane przez przeglądarkę.
Obsługa przeglądarek
showPicker()
jest dostępna w Chrome 99 lub nowszej.
Co dalej?
W momencie pisania tego artykułu showPicker()
jest nowością na platformie internetowej. W przyszłości może być konieczne dopracowanie tej funkcji:
- Jeśli deweloperzy stron internetowych poproszą o to, w przyszłości możemy dodać podobny element
showPicker()
do elementu<select>
. - Możliwe, że
closePicker()
może być przydatna, i możemy ją dodać, jeśli deweloperzy stron internetowych poproszą o to. - Możemy dodać zasady dotyczące uprawnień, które pozwolą iframe w innych domenach na wyświetlanie selektorów przeglądarki, jeśli ich łańcuch nadrzędny na to zezwala.
Prześlij opinię
Zespół Chrome i społeczność zajmująca się standardami internetowymi chce poznać Twoje wrażenia związane z użyciem showPicker()
.
Opowiedz nam o projektowaniu
Czy coś w showPicker()
nie działa zgodnie z oczekiwaniami? A może brakuje Ci metod lub właściwości potrzebnych do wdrożenia pomysłu?
Masz pytania lub uwagi dotyczące modelu zabezpieczeń?
- Zgłoś problem ze specyfikacją w repozytorium WHATWG na GitHubie lub podziel się opinią na temat istniejącego problemu.
Problem z implementacją?
Czy znalazłeś/znalazłaś błąd w implementacji Chrome? Czy implementacja różni się od specyfikacji?
- Zgłoś błąd na stronie https://new.crbug.com. Podaj jak najwięcej szczegółów i proste instrukcje odtwarzania problemu. Glitch świetnie sprawdza się do udostępniania szybkich i prostych sposobów odtwarzania.
Pokaż pomoc
Czy planujesz używać showPicker()
? Twoja publiczna pomoc pomaga zespołowi Chrome ustalać priorytety funkcji i pokazuje innym dostawcom przeglądarek, jak ważne jest ich wsparcie.
Wyślij tweeta do @ChromiumDev i powiedz nam, gdzie i jak z niego korzystasz.
Przydatne linki
- Dokumentacja MDN
- Wyjaśnienie WHATWG
- specyfikacja WHATWG,
- Sprawdzanie tagów
- Demo | Źródło wersji demonstracyjnej
- Błąd w Chromium
- Wpis na stronie ChromeStatus.com
Podziękowania
Dziękujemy Joe Medley za sprawdzenie tego artykułu. Zdjęcie kalendarza autorstwa Eric Rothermel z Unsplash.