Untuk waktu yang lama, Anda harus menggunakan library atau peretasan widget kustom untuk menampilkan
pemilih tanggal. Platform web kini dikirimkan dengan metode showPicker()
HTMLInputElement,
cara kanonis untuk menampilkan alat pilih browser tidak hanya untuk tanggal, tetapi juga waktu,
warna, dan file.
Latar belakang
Permintaan yang sering kami dengar dari developer web adalah:
Bagaimana cara secara terprogram
Stack Overflow
menampilkan alat pilih untuk kontrol seperti tanggal?
Jawaban saat ini tidak bagus; jawaban ini mengandalkan library eksternal, peretasan CSS, atau
perilaku browser tertentu seperti menyimulasikan interaksi pengguna dengan click()
.
Dengan senang hati kami sampaikan bahwa masa-masa tersebut akan segera berakhir setelah platform web
memperkenalkan cara kanonis untuk menampilkan alat pilih browser untuk elemen <input>
dengan
jenis ini: "date"
, "month"
, "week"
, "time"
, "datetime-local"
,
"color"
, dan "file"
. Pengujian ini juga akan berfungsi untuk elemen <input>
dengan
saran yang didukung oleh <datalist>
atau "autocomplete"
yang juga akan kita bahas
dalam artikel ini.
Cara menampilkan pemilih
Memanggil showPicker()
pada elemen <input>
akan menampilkan alat pilih browser kepada
pengguna. Panggilan ini harus dipanggil sebagai respons terhadap gestur pengguna seperti gestur sentuh atau
klik mouse; jika tidak, SDK akan gagal dengan pengecualian NotAllowedError
.
Demi keamanan, metode ini akan menampilkan pengecualian SecurityError
saat dipanggil dalam iframe lintas origin.
Pemilih browser ditampilkan jika elemen <input>
adalah salah satu dari jenis berikut:
"date"
, "month"
, "week"
, "time"
, "datetime-local"
, "color"
, atau
"file"
.
Contoh di bawah ini menunjukkan cara membuka pemilih tanggal di browser.
<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>
Pemilih browser juga dapat diisi otomatis dengan item dari <datalist>
atau
"autocomplete"
.
Contoh di bawah menunjukkan cara membuka alat pilih browser dengan <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>
Deteksi fitur
Untuk memeriksa apakah showPicker()
didukung, gunakan:
if ('showPicker' in HTMLInputElement.prototype) {
// showPicker() is supported.
}
Demo
Demo tersedia di https://show-picker.glitch.me/demo.html agar Anda dapat bermain dengan semua pemilih yang didukung oleh browser.
Dukungan browser
showPicker()
tersedia di Chrome 99 atau yang lebih baru.
Langkah berikutnya
Pada saat menulis email ini, showPicker()
adalah pengguna baru di platform web. Fitur ini
mungkin memerlukan perbaikan tambahan di masa mendatang:
- Kita mungkin ingin menambahkan
showPicker()
yang serupa ke elemen<select>
di masa mendatang, jika developer web memintanya. closePicker()
mungkin berguna, dan kami dapat mempertimbangkan untuk menambahkannya jika developer web memintanya.- Kita dapat menambahkan kebijakan izin yang memungkinkan iframe lintas origin menampilkan alat pilih browser saat rantai induknya memungkinkannya.
Masukan
Tim Chrome dan komunitas standar web ingin mengetahui pengalaman Anda
menggunakan showPicker()
.
Beri tahu kami tentang desainnya
Apakah ada sesuatu pada showPicker()
yang tidak berfungsi seperti yang Anda harapkan? Atau
ada metode atau properti yang hilang yang diperlukan untuk menerapkan ide Anda?
Punya pertanyaan atau komentar tentang model keamanan?
- Ajukan masalah spesifikasi di repo GitHub WhatWG, atau tambahkan pendapat Anda ke masalah yang sudah ada.
Mengalami masalah dengan penerapan?
Apakah Anda menemukan bug pada implementasi Chrome? Atau apakah implementasinya berbeda dengan spesifikasi?
- Laporkan bug di https://new.crbug.com. Pastikan Anda menyertakan detail sebanyak mungkin, dan petunjuk sederhana untuk mereproduksi. Glitch berfungsi sangat baik untuk berbagi repro dengan cepat dan mudah.
Tampilkan dukungan
Apakah Anda berencana menggunakan showPicker()
? Dukungan publik Anda membantu tim Chrome
memprioritaskan fitur dan menunjukkan kepada vendor browser lain betapa pentingnya
mendukung mereka.
Kirim tweet ke @ChromiumDev dan beri tahu kami di mana dan bagaimana Anda menggunakannya.
Link bermanfaat
- Dokumentasi MN
- Penjelasan WhatWG
- Spesifikasi whatWG
- Peninjauan TAG
- Demo | Sumber demo
- Bug Chromium
- Entri ChromeStatus.com
Ucapan terima kasih
Terima kasih kepada Joe Medley telah meninjau artikel ini. Foto gambar kalender oleh Eric Rothermel di Unsplash.