Per molto tempo, per mostrare un selettore della data, hai dovuto ricorrere a librerie di widget personalizzati o a soluzioni alternative. La piattaforma web ora viene fornita con il metodo HTMLInputElement showPicker()
,
un modo canonico per mostrare un selettore del browser non solo per le date, ma anche per l'ora,
il colore e i file.
Sfondo
Una richiesta frequente che riceviamo dagli sviluppatori web è:
Come faccio a mostrare in modo programmatico
Stack Overflow
un selettore per controlli come la data?
Le risposte attuali non sono ottimali: si basano su librerie esterne, hack CSS o
comportamenti specifici del browser, come la simulazione di un'interazione utente con click()
.
Sono felice di comunicarti che questi giorni finiranno presto, perché la piattaforma web sta
introducendo un modo canonico per mostrare un selettore del browser per gli elementi <input>
con
questi tipi: "date"
, "month"
, "week"
, "time"
, "datetime-local"
, "color"
e "file"
. Funzionerà anche per gli elementi <input>
con suggerimenti basati su <datalist>
o "autocomplete"
, che tratteremo anche in questo articolo.

Come mostrare un selettore
La chiamata di showPicker()
su un elemento <input>
mostra all'utente un selettore del browser. Deve essere chiamato in risposta a un gesto dell'utente, ad esempio un gesto tattile o
un clic del mouse; in caso contrario, l'operazione non andrà a buon fine e verrà generata un'eccezione NotAllowedError
.
Per motivi di sicurezza, genererà un'eccezione SecurityError
quando
viene chiamato in un iframe cross-origin.
Un selettore del browser viene visualizzato quando l'elemento <input>
è uno di questi tipi:
"date"
, "month"
, "week"
, "time"
, "datetime-local"
, "color"
o
"file"
.
L'esempio seguente mostra come aprire un selettore della data del 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>
Un selettore del browser può anche essere precompilato con elementi di <datalist>
o
"autocomplete"
.
L'esempio seguente mostra come aprire un selettore del browser con <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>
Rilevamento delle funzionalità
Per verificare se showPicker()
è supportato, utilizza:
if ('showPicker' in HTMLInputElement.prototype) {
// showPicker() is supported.
}
Demo
Una demo è disponibile all'indirizzo https://cdpn.io/web-dot-dev/fullpage/LEVKVdr per provare tutti i selettori supportati dal browser.
Supporto browser
showPicker()
è disponibile in Chrome 99 o versioni successive.
Passaggi successivi
Al momento della stesura, showPicker()
è una novità della piattaforma web. La funzionalità
potrebbe richiedere ulteriore lavoro in futuro:
- In futuro potremmo voler aggiungere un
showPicker()
simile all'elemento<select>
se gli sviluppatori web lo richiedono. - È possibile che
closePicker()
sia utile e potremmo prendere in considerazione l'aggiunta se gli sviluppatori web lo richiedono. - Potremmo aggiungere un criterio per le autorizzazioni che consenta agli iframe multiorigine di mostrare i selettori del browser quando la catena principale lo consente.
Feedback
Il team di Chrome e la community degli standard web vogliono conoscere le tue
esperienze con showPicker()
.
Descrivi il design
C'è qualcosa in showPicker()
che non funziona come previsto? Oppure
mancano metodi o proprietà che ti servono per implementare la tua idea?
Hai una domanda o un commento sul modello di sicurezza?
- Segnala un problema relativo alle specifiche nel repository GitHub di WHATWG o aggiungi i tuoi commenti a un problema esistente.
Problemi con l'implementazione?
Hai trovato un bug nell'implementazione di Chrome? O l'implementazione è diversa dalla specifica?
- Invia una segnalazione di bug all'indirizzo https://new.crbug.com. Assicurati di includere il maggior numero di dettagli possibile e istruzioni semplici per la riproduzione.
Mostrare il proprio sostegno
Hai intenzione di utilizzare showPicker()
? Il tuo supporto pubblico aiuta il team di Chrome a dare la priorità alle funzionalità e mostra ad altri fornitori di browser quanto sia fondamentale supportarle.
Invia un tweet a @ChromiumDev e facci sapere dove e come lo utilizzi.
Link utili
- Documentazione MDN
- Messaggio esplicativo WHATWG
- Specifica WHATWG
- Revisione del TAG
- Demo | Fonte della demo
- Bug di Chromium
- Voce di ChromeStatus.com
Ringraziamenti
Grazie a Joe Medley per aver esaminato questo articolo. Foto dell'immagine del calendario di Eric Rothermel su Unsplash.