Ich arbeite mit Eingabeattributen für HTML5-Elemente und nur Google Chrome unterstützt die Datums- und Zeitattribute. Ich habe Modernizr ausprobiert , kann aber nicht verstehen, wie ich es in meine Website integrieren soll (wie man es codiert / wie lautet die Syntax / enthält). Jeder Code-Ausschnitt, der zeigt, wie mit Datums- und Zeitattributen für alle Browser gearbeitet wird.
javascript
jquery
html
jquery-ui
leonardeveloper
quelle
quelle
Antworten:
Jeder Browser, der den Eingabetyp nicht unterstützt, verwendet
date
standardmäßig den Standardtyp.text
Sie müssen also nur die Typeneigenschaft (nicht das Attribut) überprüfen. Wenn dies nichtdate
der Fall ist, wird die Datumseingabe vom Browser nicht unterstützt. und Sie fügen Ihren eigenen Datepicker hinzu:if ( $('[type="date"]').prop('type') != 'date' ) { $('[type="date"]').datepicker(); }
GEIGE
Sie können natürlich jeden gewünschten Datepicker verwenden. Der Datepicker von jQuery UI ist wahrscheinlich der am häufigsten verwendete, aber er fügt einiges an Javascript hinzu, wenn Sie die UI-Bibliothek nicht für andere Zwecke verwenden, aber es gibt Hunderte von alternativen Datepickern wählen von.
Das
type
Attribut ändert sich nie, der Browser greift nur auf den Standardtyptext
für die Eigenschaft zurück, sodass die Eigenschaft überprüft werden muss.Das Attribut kann weiterhin wie im obigen Beispiel als Selektor verwendet werden.
quelle
$('input').prop('type') != 'date'
Modernizr ändert eigentlich nichts daran, wie die neuen HTML5-Eingabetypen behandelt werden. Es ist ein Merkmal Detektor , kein Shim (außer
<header>
,<article>
usw., die als Blockelemente ähnlich wie behandelt werden Beilagscheiben<div>
).Um es zu verwenden
<input type='date'>
, müssen SieModernizr.inputtypes.date
Ihr eigenes Skript einchecken. Wenn es falsch ist, aktivieren Sie ein anderes Plugin, das eine Datumsauswahl bietet. Sie haben Tausende zur Auswahl; Modernizr führt eine nicht erschöpfende Liste von Polyfills , die Ihnen möglicherweise einen Ausgangspunkt bieten. Alternativ können Sie es einfach loslassen - alle Browser greifen auftext
einen Eingabetyp zurück, den sie nicht erkennen. Das Schlimmste, was passieren kann, ist, dass Ihr Benutzer das Datum eingeben muss. (Vielleicht möchten Sie ihnen einen Platzhalter geben oder etwas wie jQuery.maskedinput verwenden, um sie auf dem Laufenden zu halten.)quelle
Sie haben nach einem Modernizr-Beispiel gefragt, also los geht's. Dieser Code verwendet Modernizr, um festzustellen, ob der Eingabetyp "Datum" unterstützt wird. Wenn es nicht unterstützt wird, schlägt es auf JQueryUI datepicker zurück.
Hinweis: Sie müssen JQueryUI herunterladen und möglicherweise die Pfade zu den CSS- und JS-Dateien in Ihrem eigenen Code ändern.
<!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>
Ich hoffe das funktioniert bei dir.
quelle
<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>
QUELLE 1 & QUELLE 2
quelle
Dies ist eine Art Meinungsbeitrag, aber wir hatten großen Erfolg mit WebShims . Die Verwendung von jQuery datepicker kann fehlerhaft sein, wenn native nicht verfügbar ist. Demo hier
quelle
Verwenden Sie einfach
<script src="modernizr.js"></script>
in diesem<head>
Abschnitt, und das Skript fügt Klassen hinzu, mit denen Sie die beiden Fälle trennen können: ob es vom aktuellen Browser unterstützt wird oder nicht.Folgen Sie außerdem den Links in diesem Thread. Es wird Ihnen helfen: HTML5-Eingabetyp Datum, Farbe, Bereichsunterstützung in Firefox und Internet Explorer
quelle
Chrome Version 50.0.2661.87 m unterstützt das Format MM-TT-JJ nicht, wenn es einer Variablen zugewiesen wird. Es wird JJ-MM-TT verwendet. IE und Firefox funktionieren wie erwartet.
quelle
Die beste einfache und funktionierende Lösung, die ich gefunden habe, ist die Arbeit an folgenden Browsern
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>
quelle
Zwei-Skript-Include-Lösung (2019):
Fügen Sie einfach Better-Dom und Better-Dateinput-Polyfill in Ihren Skriptbereich ein.
Hier ist eine Demo:
http://chemerisuk.github.io/better-dateinput-polyfill/
quelle
Ich hatte Probleme damit, das britische TT / MM / JJJJ-Format beizubehalten. Ich habe zunächst die Antwort von Adeneo https://stackoverflow.com/a/18021130/243905 verwendet, aber das hat in Safari für mich nicht funktioniert. was, soweit ich das beurteilen kann, überall funktioniert - mit dem jquery-ui datepicker, jquery validation.
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; } }
quelle
quelle