Pracuję z atrybutami wejściowymi elementów HTML5 i tylko Google Chrome obsługuje atrybuty daty i czasu. Próbowałem Modernizr, ale nie mogę zrozumieć, jak go zintegrować na mojej stronie internetowej (jak go zakodować / jaka jest składnia / zawiera). Dowolny fragment kodu pokazujący, jak pracować z atrybutami daty i godziny we wszystkich przeglądarkach.
javascript
jquery
html
jquery-ui
leonardeveloper
źródło
źródło
Odpowiedzi:
Każda przeglądarka, która nie obsługuje tego typu danych wejściowych,
date
będzie domyślnie ustawiać na typ standardowy, co oznaczatext
, że jedyne co musisz zrobić, to sprawdzić właściwość type (nie atrybut) , jeśli niedate
, wprowadzanie daty nie jest obsługiwane przez przeglądarkę, i dodajesz własnego datepicker:if ( $('[type="date"]').prop('type') != 'date' ) { $('[type="date"]').datepicker(); }
SKRZYPCE
Możesz oczywiście użyć dowolnego datepickera, prawdopodobnie najczęściej używanego jest datepicker jQuery UI, ale dodaje sporo javascript, jeśli nie używasz biblioteki UI do niczego innego, ale istnieją setki alternatywnych datepickerów do wybrania z.
Plik
type
Atrybut nigdy się nie zmienia, przeglądarka spadnie tylko z powrotem do domyślnegotext
typu dla właściwości, więc trzeba sprawdzić właściwość.Atrybut może nadal służyć jako selektor, jak w powyższym przykładzie.
źródło
$('input').prop('type') != 'date'
Modernizr właściwie nie zmienia niczego w sposobie obsługi nowych typów danych wejściowych HTML5. Jest to cecha detektora , a nie podkładki (z wyjątkiem
<header>
,<article>
itp, które to podkładek być traktowane jako elementy blokowe podobnej do<div>
).Aby go użyć
<input type='date'>
, musisz sprawdzićModernizr.inputtypes.date
własny skrypt, a jeśli jest fałszywy, włącz inną wtyczkę, która zapewnia selektor daty. Masz tysiące do wyboru; Modernizr prowadzi niewyczerpującą listę polyfillów, od których możesz zacząć. Ewentualnie możesz po prostu odpuścić - wszystkie przeglądarki wracają do,text
gdy są przedstawiane z typem danych wejściowych, których nie rozpoznają, więc najgorsze, co może się zdarzyć, jest to, że użytkownik musi wpisać datę. (Możesz chcieć dać im symbol zastępczy lub użyć czegoś takiego jak jQuery.maskedinput, aby utrzymać je na właściwym torze).źródło
Poprosiłeś o przykład Modernizr, więc proszę bardzo. Ten kod używa programu Modernizr do wykrywania, czy typ danych wejściowych „data” jest obsługiwany. Jeśli nie jest obsługiwany, nie powraca do wyboru daty JQueryUI.
Uwaga: będziesz musiał pobrać JQueryUI i ewentualnie zmienić ścieżki do plików CSS i JS we własnym kodzie.
<!DOCTYPE html> <html> <head> <title>Modernizer Detect 'date' input type</title> <link rel="stylesheet" type="text/css" href="jquery-ui-1.10.3/themes/base/jquery.ui.all.css"/> <script type="text/javascript" src="http://ajax.aspnetcdn.com/ajax/modernizr/modernizr-1.7-development-only.js"></script> <script type="text/javascript" src="http://code.jquery.com/jquery-1.10.2.min.js"></script> <script type="text/javascript" src="jquery-ui-1.10.3/ui/jquery.ui.core.js"></script> <script type="text/javascript" src="jquery-ui-1.10.3/ui/jquery.ui.widget.js"></script> <script type="text/javascript" src="jquery-ui-1.10.3/ui/jquery.ui.datepicker.js"></script> <script type="text/javascript"> $(function(){ if(!Modernizr.inputtypes.date) { console.log("The 'date' input type is not supported, so using JQueryUI datepicker instead."); $("#theDate").datepicker(); } }); </script> </head> <body> <form> <input id="theDate" type="date"/> </form> </body> </html>
Mam nadzieję, że to działa dla Ciebie.
źródło
<script> var datefield = document.createElement("input") datefield.setAttribute("type", "date") if (datefield.type != "date") { // if browser doesn't support input type="date", load files for jQuery UI Date Picker document.write('<link href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/themes/base/jquery-ui.css" rel="stylesheet" type="text/css" />\n') document.write('<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js"><\/script>\n') document.write('<script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/jquery-ui.min.js"><\/script>\n') } </script> <script> if (datefield.type != "date") { // if browser doesn't support input type="date", initialize date picker widget: jQuery(function($) { // on document.ready $('#birthday').datepicker(); }); <- missing semicolon } </script>
<body> <form> <b>Date of birth:</b> <input type="date" id="birthday" name="birthday" size="20"> <input type="button" value="Submit" name="B1"> </form> </body>
ŹRÓDŁO 1 I ŹRÓDŁO 2
źródło
To trochę opinia, ale odnieśliśmy wielki sukces z WebShims . Jeśli natywny nie jest dostępny, użycie jQuery datepicker może się zepsuć. Demo tutaj
źródło
Po prostu użyj
<script src="modernizr.js"></script>
w<head>
sekcji, a skrypt doda klasy, które pomogą ci oddzielić dwa przypadki: czy jest obsługiwana przez aktualną przeglądarkę, czy nie.Ponadto postępuj zgodnie z linkami zamieszczonymi w tym wątku. Pomoże Ci: data, kolor, zakres danych wejściowych HTML5, obsługa zakresu w przeglądarkach Firefox i Internet Explorer
źródło
Chrome w wersji 50.0.2661.87 m nie obsługuje formatu mm-dd-rr po przypisaniu do zmiennej. Używa rr-mm-dd. IE i Firefox działają zgodnie z oczekiwaniami.
źródło
najlepszym łatwym i działającym rozwiązaniem, jakie znalazłem, jest praca na następujących przeglądarkach
Safari
<!doctype html> <html> <head> <meta charset="utf-8"> <title>Untitled Document</title> </head> <body> <h2>Poly Filler Script for Date/Time</h2> <form method="post" action=""> <input type="date" /> <br/><br/> <input type="time" /> </form> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script> <script src="http://cdn.jsdelivr.net/webshim/1.12.4/extras/modernizr-custom.js"></script> <script src="http://cdn.jsdelivr.net/webshim/1.12.4/polyfiller.js"></script> <script> webshims.setOptions('waitReady', false); webshims.setOptions('forms-ext', {type: 'date'}); webshims.setOptions('forms-ext', {type: 'time'}); webshims.polyfill('forms forms-ext'); </script> </body> </html>
źródło
Rozwiązanie z dwoma skryptami (2019):
Po prostu uwzględnij Better-Dom i Better-Dateinput-Polyfill w sekcji skryptów.
Oto Demo:
http://chemerisuk.github.io/better-dateinput-polyfill/
źródło
Miałem z tym problemy, utrzymując brytyjski format dd / mm / rrrr, początkowo użyłem odpowiedzi z adeneo https://stackoverflow.com/a/18021130/243905, ale to nie zadziałało dla mnie w safari, więc zmieniłem na to, który, o ile wiem, działa wszędzie - używając jquery-ui datepicker, walidacji jquery.
if ($('[type="date"]').prop('type') !== 'date') { //for reloading/displaying the ISO format back into input again var val = $('[type="date"]').each(function () { var val = $(this).val(); if (val !== undefined && val.indexOf('-') > 0) { var arr = val.split('-'); $(this).val(arr[2] + '/' + arr[1] + '/' + arr[0]); } }); //add in the datepicker $('[type="date"]').datepicker(datapickeroptions); //stops the invalid date when validated in safari jQuery.validator.methods["date"] = function (value, element) { var shortDateFormat = "dd/mm/yy"; var res = true; try { $.datepicker.parseDate(shortDateFormat, value); } catch (error) { res = false; } return res; } }
źródło
źródło