Come ottenere il tipo di input HTML 5 = "date" funzionante in Firefox e / o IE 10


191

Trovo strano che non input type="date"sia ancora supportato in Firefox dopo tutto questo tempo. In realtà, non credo che abbiano aggiunto molti (se ve ne sono) dei nuovi tipi HTML 5 su un elemento di input. Non sorprende che non sia supportato in IE10. Quindi, la mia domanda è ...

Come ottenere type="date"un inputelemento funzionante senza aggiungere, ancora un altro file .js (vale a dire jQueryUIWidget DatePicker) solo per ottenere un calendario / data solo per IE e Firefox Browser? C'è qualcosa là fuori che può essere applicato da qualche parte (CDN forse?) Che farà funzionare questa funzionalità di default in Firefox e / o IE Browser ?? Cercando di scegliere come target IE 8+ Browser e per Firefox, non importa, la versione più recente (28.0) andrà bene.

AGGIORNAMENTO: Firefox 57+ supporta input type = date


29
Mi sembra ridicolo che Firefox non lo supporti ancora. Sono passato da Chrome a Firefox oggi, solo per un giorno / settimana per vedere cosa succede in questi giorni, e questo mi fa immediatamente tornare indietro!
Codemonkey

19
è una barzelletta FF data non cena
SuperUberDuper

6
Questo è il motivo per cui mi sento arrabbiato quando la gente dice che Firefox è il miglior browser.
Martin Braun,

1
Pur non essendo un polyfill, ho appena finito di usare Pickaday, che è una semplice js lib senza jquery o altre dipendenze ...
mb21

2
Sembra funzionare per impostazione predefinita in Firefox 57. Ancora!
Antoine Pinsard,

Risposte:


138

Puoi provare webshims , che è disponibile su cdn + carica solo il polyfill, se necessario.

Ecco una demo con CDN: http://jsfiddle.net/trixta/BMEc9/

<!-- cdn for modernizr, if you haven't included it already -->
<script src="http://cdn.jsdelivr.net/webshim/1.12.4/extras/modernizr-custom.js"></script>
<!-- polyfiller file to detect and load polyfills -->
<script src="http://cdn.jsdelivr.net/webshim/1.12.4/polyfiller.js"></script>
<script>
  webshims.setOptions('waitReady', false);
  webshims.setOptions('forms-ext', {types: 'date'});
  webshims.polyfill('forms forms-ext');
</script>

<input type="date" />

Nel caso in cui la configurazione predefinita non soddisfi, ci sono molti modi per configurarla . Qui trovi il configuratore di datepicker .

Nota: anche se in futuro potrebbero esserci nuove versioni di bugfix per webshim. Non ci saranno più versioni importanti. Ciò include il supporto per jQuery 3.0 o qualsiasi nuova funzionalità.


questa è una buona soluzione, la configurazione è ricca, ma non riesco a trovare dove impostare il formato della data come "AAAA / MM / GG"
Pavel Niedoba

14
Viene visualizzato l'errore "Accesso negato" quando provo a eseguire questo jsfiddle in IE 11 e il selettore della data non funziona.
Shavais,

4
Questo non funziona su IE10 ... ottengo lo stesso errore come indicato da @Shavais ... per farlo funzionare aggiornare la versione jQuery a 1.11 o above..try questo collegamento
Nitin

2
Sfortunatamente, il supporto di webshims al prossimo Jquery 3 non verrà eseguito, come informato sul sito dell'autore. Essendo così, farei affidamento sull'interfaccia utente di Jquery buona e vecchia.
marionmaiden,

1
Questo funziona sicuramente in Firefox. Ma non ha funzionato in IE
Varuni NR

27

È in Firefox dalla versione 51 (26 gennaio 2017), ma non è attivato per impostazione predefinita (ancora)

Per attivarlo:

about: config

dom.forms.datetime -> impostato su true

https://developer.mozilla.org/en-US/Firefox/Experimental_features


Felice di sentirlo. Dovrebbe essere attivo per impostazione predefinita. Ma questo è buono a sapersi.
Solomon Closson il

Sono su FF 64.0.2, ma anche se questa opzione è "true" (attiva) non funziona, la casella data / ora è ancora solo testo. Ho provato ad abilitare il "timepicker" anche senza successo.
Wasted_Coder,

20

C'è un modo semplice per sbarazzarsi di questa limitazione usando il componente datePicker fornito da jQuery.

  1. Includi le librerie dell'interfaccia utente jQuery e jQuery (ne sto ancora utilizzando una vecchia)

    • src = "js / jquery-1.7.2.js"
    • src = "js / jquery-ui-1.7.2.js"
  2. Usa il seguente taglio

    $(function() {
         $( "#id_of_the_component" ).datepicker({ dateFormat: 'yy-mm-dd'}); 
    });

Vedi DatePicker dell'interfaccia utente jQuery - Se necessario, modifica il formato della data .


8
OP dice "lavorare senza aggiungere, ancora un altro file .js (vale a dire jQueryUI DatePicker Widget)" ... ma questa domanda è la migliore hit di Google, quindi la tua risposta è ancora MOLTO utile, anche se non risponde alla domanda. Vorrei non dovermi sentire male per aver votato il tuo post ora.
phil294

2
È necessario includere anche CSS dell'interfaccia utente jQuery per mostrare correttamente il calendario. <br> <link rel = "stylesheet" href = "// code.jquery.com/ui/1.12.0/themes/base/jquery-ui.css">
YuAn Shaolin Maculelê Lai

16

Type = "date" non è una specifica effettiva a questo punto. È un concetto che Google ha sviluppato ed è nelle loro specifiche whatwg (non ufficiali) ed è supportato solo parzialmente da Chrome.

http://caniuse.com/#search=date

Non farei affidamento su questo tipo di input a questo punto. Sarebbe bello averlo, ma non prevedo che questo ce l'abbia davvero fatta. Il motivo numero 1 è che grava troppo sul browser per determinare la migliore interfaccia utente per un input alquanto complicato. Pensaci da una prospettiva reattiva, in che modo qualcuno dei distributori potrebbe sapere cosa funzionerà meglio con la tua interfaccia utente a 400 pixel, 800 pixel e 1200 pixel di larghezza?


138
Non sono d'accordo, i browser dovrebbero essere abbastanza intelligenti da capirlo. Sono davvero stanco di utilizzare i selettori di date là fuori e di dover continuare ad aggiornarli.
SuperUberDuper,

49
Strano ragionamento. Troppo onere per i browser, ma non per lo sviluppatore web di joe?!?
jeroenh,

35
Questo fa ora parte della bozza di lavoro di HTML 5: w3.org/html/wg/drafts/html/master/…
Chris,

7
Anch'io sono contento per ogni nuovo tipo di input. Sono meglio definiti e nativi, che di solito significa veloce.
Tomáš Zato - Ripristina Monica il

5
@MM Grazie. Nel frattempo, HTML 5 è stato aggiornato a una raccomandazione W3C ufficiale. Il nuovo link è w3.org/TR/2014/REC-html5-20141028/…
Chris

9

Ecco un esempio completo con la data formattata in AAAA-MM-GG

<script type="text/javascript" src="http://code.jquery.com/jquery-2.1.4.min.js"></script> 
<script src="//cdn.jsdelivr.net/webshim/1.14.5/polyfiller.js"></script>
<script>
webshims.setOptions('forms-ext', {types: 'date'});
webshims.polyfill('forms forms-ext');
$.webshims.formcfg = {
en: {
    dFormat: '-',
    dateSigns: '-',
    patterns: {
        d: "yy-mm-dd"
    }
}
};
</script>
<input type="date" />

1
Qualcuno sa se questo consente l'opzione di aggiungere anche un selettore del tempo?
drooh,

Ho provato la tua sceneggiatura in JSFiddle @Drooh ma non funziona. Ogni volta che seleziono una data, questa appare per un millisecondo nel campo di inserimento e poi scompare. Qualcuno può fornire una versione di violino funzionante con una data di configurazione gg / mm / aaaa?
Ryan Coolwebs,

Nota, a partire da agosto 2016 webshim non funziona con jQuery 3 e nei miei test non funziona neanche con 2.2.4.
drooh,

Ho trovato questo per essere la soluzione migliore fino a quando Firefox aggiunge una data di ingresso stackoverflow.com/questions/2528706/...
drooh

4

Sebbene ciò non ti consenta di ottenere un'interfaccia utente di datepicker, Mozilla consente l'uso di pattern, quindi puoi almeno ottenere la convalida della data con qualcosa del genere:

pattern='(?:19|20)[0-9]{2}-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1[0-9]|2[0-9])|(?:(?!02)(?:0[1-9]|1[0-2])-(?:30))|(?:(?:0[13578]|1[02])-31))'

Alla fine sono d'accordo con @SuperUberDuper in quanto Mozilla è molto indietro nel includerlo in modo nativo.


1
esiste una versione per "tempo"?
Malcolm Salvador,

1
Espandi questo esempio. È un attributo html per l'input?
Wasted_Coder,

3

Questo è solo un suggerimento che segue la risposta di Dax. (Lo aggiungerei in un commento a quella risposta, ma non ho ancora abbastanza reputazione per commentare altre domande).

Gli ID devono essere univoci per ogni campo, quindi, se nel tuo modulo (o moduli) sono presenti più campi data, puoi utilizzare l'elemento di classe anziché l'ID:

 $(function() { $( ".datepicker" ).datepicker({ dateFormat: 'yy-mm-dd' }); });

e il tuo contributo come:

 <input type="text" class="datepicker" name="your-name" />

Ora, ogni volta che hai bisogno del selettore della data, aggiungi semplicemente quella classe. PS Lo so, devi ancora usare js :(, ma almeno sei pronto per tutto il tuo sito. I miei 2 centesimi ...


3

L'ultima versione di Firefox Firefox 57 (Quantum) supporta la data e altre funzionalità rilasciate il 14 novembre 2017. Puoi scaricarla facendo clic su questo link


0

Grazie ad Alexander, ho trovato il modo di modificare il formato per la lingua. (Non sapevo quale lang utilizza tale formato)

 $.webshims.formcfg = {
        en: {
            dFormat: '/',
            dateSigns: '/',
            patterns: {
                d: "yy/mm/dd"
            }
        }
     };

 $.webshims.activeLang('en');

Penso che l'unico paese "en" che utilizza quel formato sia il Canada. In ogni caso, "en" è ambiguo, perché include anche gli Stati Uniti, che hanno un formato di data "speciale" praticamente unico.
Michael Scheper,

Nel mio caso si tratta di sovrascrivere il formato della data per qualsiasi locale del client, che potrebbe differire sulle workstation client. Tuttavia su una determinata pagina voglio usare questo formato data (per motivi di copia e incolla). È più come un commento per la risposta di Alexander Farkas ma ho inserito una risposta separata perché non riesco a incollare il codice nei commenti. Lo sto usando nell'ambiente di produzione da più di un anno.
Pavel Niedoba,

Stai attento. Se Webshims si basa sull'interpretazione da parte del browser delle impostazioni internazionali, potresti avere risultati imprevedibili. 'en' probabilmente non significherà lo stesso formato su piattaforme diverse (a seconda delle impostazioni locali del sistema) o anche in browser diversi. Può essere interpretato come "en-ca" da un browser in Canada (che è molto probabilmente aaaa-mm-gg, ma forse non coerente) ma "en-in" da un browser in India (che, come la maggior parte del mondo , produrrebbe gg-mm-aaaa). Solo perché è nel codice di produzione non significa che sia stato testato correttamente: molti bug i18n esistono nel codice di produzione, anche su siti di grandi dimensioni.
Michael Scheper,

L'ultima riga $ .webshims.activeLang ('en'); dovrebbe forzare lang (o locale) a webshims che sovrascrivono le impostazioni del browser, quindi il formato è sempre lo stesso.
Pavel Niedoba,

0

A volte non vuoi usare Datepicker http://jqueryui.com/datepicker/ nel tuo progetto perché:

  • Non vuoi usare jquery
  • Conflitto di versioni jquery nel tuo progetto
  • La scelta dell'anno non è conveniente. Ad esempio, hai bisogno di 120 clic sul pulsante precedente per passare a 10 anni fa.

Si prega di consultare il mio codice cross browser molto semplice per l'inserimento della data. Il mio codice si applica solo se il tuo browser non supporta l'inserimento del tipo di data

<!doctype html>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
    <title>Input Key Filter Test</title>
	<meta name="author" content="Andrej Hristoliubov anhr@mail.ru">
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
	
	<!-- For compatibility of IE browser with audio element in the beep() function.
	https://www.modern.ie/en-us/performance/how-to-use-x-ua-compatible -->
	<meta http-equiv="X-UA-Compatible" content="IE=9"/>
	
	<link rel="stylesheet" href="https://rawgit.com/anhr/InputKeyFilter/master/InputKeyFilter.css" type="text/css">		
	<script type="text/javascript" src="https://rawgit.com/anhr/InputKeyFilter/master/Common.js"></script>
	<script type="text/javascript" src="https://rawgit.com/anhr/InputKeyFilter/master/InputKeyFilter.js"></script>
	
</head>
<body>
	<h1>Date field</h1>
    Date:
    <input type='date' id='date' />
    New date: <span id="NewDate"></span>
    <script>
        CreateDateFilter('date', {
                formatMessage: 'Please type date %s'
                , onblur: function (target) {
                    if (target.value == target.defaultValue)
                        return;
                    document.getElementById('NewDate').innerHTML = target.value;
                }
                , min: new Date((new Date().getFullYear() - 10).toString()).toISOString().match(/^(.*)T.*$/i)[1]//'2006-06-27'//10 years ago
                , max: new Date().toISOString().match(/^(.*)T.*$/i)[1]//"2016-06-27" //Current date
                , dateLimitMessage: 'Please type date between "%min" and "%max"'
            }
        );
    </script>

</body>
</html>


3
Questo codice fallisce completamente. Non riesco a digitare una data perché il campo è già riempito con "AAA-MM-GG" e, se provo a cancellarlo, riappare.
Stephen R,

Si prega di non eliminare i trattini. Ho testato con successo in Windows 10 Google Chrome 52, Firefox 41, Opera 39, Microsoft Edge, IE 11. Ti prego di comunicarmi il tuo dispositivo, sistema operativo e browser.
Andrej

In realtà sto solo premendo il link "Esegui snippet di codice" proprio sotto il tuo commento. Non riesco a digitare una data correttamente perché il segnaposto "AAAA-MM-GG" è attivamente in competizione con me piuttosto che scomparire quando inizio a digitare. Sto usando l'ultimo Firefox su Windows 10.
Stephen R

1
non risponde alla domanda poiché viola la condizione di non aggiungere file JS esterni e in realtà il codice stesso non è del tutto intuitivo da utilizzare. impone il formato ISO alle persone anche quando non è il loro formato di data nativo, non può digitare una nuova data quando ricompare la maschera di input, non può sovrascrivere la maschera di input in quanto non è una maschera ma il testo nella casella, deve eliminare la maschera come tu digiti. non comunque migliore di un input standard con validazione regex
MikeT,




-2
<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>jQuery UI Datepicker - Default functionality</title>
  <link rel="stylesheet" href="//code.jquery.com/ui/1.11.4/themes/smoothness/jquery-ui.css">
  <script src="//code.jquery.com/jquery-1.10.2.js"></script>
  <script src="//code.jquery.com/ui/1.11.4/jquery-ui.js"></script>
  <link rel="stylesheet" href="/resources/demos/style.css">
  <script>
  $(function() {
    $( "#datepicker" ).datepicker();
  });
  </script>
</head>
<body>

<p>Date: <input type="text" id="datepicker"></p>


</body>
</html>
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.