Ich mache eine Phonegap-App. Wenn ich ein type="date"
Eingabefeld wie unten gezeigt versuche , wird die Datumsauswahl im iPhone wie erwartet angezeigt, aber der von mir angegebene Platzhalter wird nicht angezeigt. Ich habe das gleiche Problem hier in SO gefunden, aber nirgendwo eine Lösung.
<input placeholder="Date" class="textbox-n" type="date" id="date">
html
cordova
datepicker
placeholder
Mumthezir VP
quelle
quelle
Antworten:
Es mag nicht angemessen sein ... aber es hat mir geholfen.
quelle
Wenn Sie die Methode von mvp verwenden, aber das Ereignis onblur hinzufügen, um es wieder in ein Textfeld zu ändern, wird der Platzhaltertext erneut angezeigt, wenn das Eingabefeld den Fokus verliert. Es macht den Hack nur ein bisschen schöner.
Hoffe das hilft.
quelle
Am Ende habe ich Folgendes verwendet.
In Bezug auf Firefox-Kommentare : Im Allgemeinen zeigt Firefox keinen Textplatzhalter für das Datum des Eingabetyps an. Da es sich jedoch um eine Cordova / PhoneGap-Frage handelt, sollte dies keine Rolle spielen (es sei denn, Sie möchten gegen FirefoxOS entwickeln).
quelle
<input type="date" placeholder="MY PLACEHOLDER" onchange="this.classList.toggle('has-value',this.value);">
input[type="date"]:not(:focus):not(.has-value):before
, um das Format anzuzeigen , während die Eingabe fokussiert ist (für Personen, die das DatumIch habe dies in meinem CSS verwendet:
und so etwas in Javascript einfügen:
es funktioniert für mich für mobile Geräte (Ios8 und Android). Aber ich habe jquery inputmask für den Desktop mit Eingabetexttyp verwendet. Diese Lösung ist eine gute Möglichkeit, wenn Ihr Code auf ie8 ausgeführt wird.
quelle
color: #aaa
für ein platzhalterähnliches Erscheinungsbild unter iOS verwenden sollten.color: lightgray
ist einfach zu leicht.$("#myel").on( "input" , function(){ $(this).toggleClass( "full" , $(this).val().length > 0 ); });
Ab heute (2016) habe ich diese 2 Snippets erfolgreich verwendet (und sie funktionieren hervorragend mit Bootstrap4).
Geben Sie links Daten ein, links Platzhalter
Platzhalter verschwinden beim Klicken
quelle
Nach dem HTML-Standard :
quelle
Für mich geht das:
quelle
:after
Pseudoelement verschwinden, wenn ein Datum ausgewählt wird. Der Platzhalteronfocus="(this.placeholder='')"
, um den Platzhalter zu entfernen, sobald das Datum ausgewählt ist.Ich habe diese weiße jQuery verwendet: http://jsfiddle.net/daviderussoabram/65w1qhLz/
quelle
Basierend auf den Antworten von deadproxor und Alessio würde ich versuchen, nur CSS zu verwenden:
Und wenn Sie den Platzhalter unsichtbar machen müssen, nachdem Sie etwas in die Eingabe geschrieben haben, können Sie versuchen, die Selektoren: valid und: invalid zu verwenden, wenn Ihre Eingabe erforderlich ist.
BEARBEITEN
Hier ist der Code, den Sie für Ihre Eingabe benötigen:
quelle
Wir haben einen besseren Weg gefunden, um Ihr Problem zu lösen. Ich denke, das wird dir helfen. Wenn das Feld fokussiert ist, ändert es den Typ in Text, sodass Ihr Platzhalter angezeigt wird. Bei Fokussierung ändert sich der Typ in Datum, sodass die Kalenderansicht angezeigt wird.
quelle
Ich habe die Idee von jbarlow übernommen, aber in der Funktion onblur ein if hinzugefügt, damit die Felder ihren Typ nur ändern, wenn der Wert leer ist
quelle
Beheben des Problems in der aktuell richtigen Antwort "Durch Klicken auf das Feld wird die Bildschirmtastatur anstelle des Datumsauswahlelements angezeigt":
Das Problem wird dadurch verursacht, dass sich der Browser beim Klicken (= Text) entsprechend der Art der Eingabe verhält. Daher ist es notwendig, sich nicht mehr auf das Eingabeelement (Unschärfe) zu konzentrieren und dann den Fokus programmgesteuert auf das Eingabeelement neu zu starten, das im ersten Schritt von JS als Typ = Datum definiert wurde. Die Tastatur wird im Telefonnummernmodus angezeigt.
quelle
versuche meine Lösung. Ich benutze das Attribut 'erforderlich', um zu erfahren, ob die Eingabe gefüllt ist, und wenn nicht, zeige ich den Text vom Attribut 'Platzhalter' an.
quelle
Ich habe eine Weile gebraucht, um das herauszufinden, lass es wie
type="text"
und füge es hinzuonfocus="(this.type='date')"
, genau wie oben gezeigt.Ich mag sogar die oben erwähnte onBlur-Idee
<input placeholder="Date" class="textbox-n" type="text" onfocus="(this.type='date')" onblur="(this.type='text')" id="date">
Hoffe, das hilft allen, die nicht ganz verstanden haben, was oben los ist
quelle
Um das Problem mit den Datumseingaben zusammenzufassen:
Die Lösung, die ich gefunden habe, um diese Anforderungen zu erfüllen, besteht darin, native Formularelemente mit dem üblichen Trick zu formatieren: Stellen Sie sicher, dass das Element angezeigt, aber nicht sichtbar ist, und zeigen Sie den erwarteten Stil über die zugehörige Bezeichnung an . In der Regel wird die Beschriftung als Eingabe (einschließlich eines Platzhalters) angezeigt, jedoch darüber.
Also ein HTML wie:
Könnte wie folgt gestaltet werden:
Jedes Ereignis (Klicken, Fokussieren) auf eine solche zugehörige Beschriftung wird im Feld selbst angezeigt und löst so die Benutzeroberfläche für die Datumseingabe aus.
Wenn Sie eine solche Lösung live testen möchten, können Sie diese Angular-Version von Ihrem Tablet oder Handy aus ausführen .
quelle
Also, was ich beschlossen habe, ist hier und es funktioniert gut auf allen mobilen Browsern, einschließlich iPhones und Androids.
Datum
quelle
Ich arbeite mit ionicframework und die von @Mumthezir bereitgestellte Lösung ist fast perfekt. Für den Fall, dass jemand das gleiche Problem wie ich hätte (nach der Änderung ist die Eingabe immer noch fokussiert und beim Scrollen verschwindet der Wert einfach). Also habe ich onchange hinzugefügt, um input.blur () zu erstellen.
quelle
Sie können
so was...
quelle
Mit Mouseover und Öffnen des Datepickers beim Klicken einen besseren Weg gefunden, um mit dem grundlegenden Verständnis des Benutzers umzugehen:
<input type="text" onfocus="(this.type='date')" onmouseover="(this.type = 'date')" onblur="(this.value ? this.type = 'date' : this.type = 'text')" id="date_start" placeholder="Date">
Verstecken Sie auch den Webkit-Pfeil und machen Sie ihn 100% breit, um den Klick abzudecken:
quelle
Aus Angular-Sicht habe ich es geschafft, einen Platzhalter in das Datumselement des Eingabetyps einzufügen.
Zunächst habe ich folgendes CSS definiert:
Der Grund, warum dies notwendig ist, ist, dass ich, wenn CSS3-Inhalte eine andere Farbe haben als der normale Platzhalter, einen gemeinsamen verwenden musste.
Anschließend wurde in der Vorlage ein viewchild-Geburtsdatum-Attribut verwendet, um über die Komponente auf diese Eingabe zugreifen zu können. Und einen Winkelausdruck für das Platzhalterattribut definiert, der entscheidet, ob der Platzhalter angezeigt wird oder nicht. Dies ist der Hauptnachteil der Lösung, da Sie die Sichtbarkeit des Platzhalters verwalten müssen.
quelle
Überarbeiteter Code von mumthezir
quelle
Ich bin überrascht, dass es nur eine Antwort gibt, deren Ansatz dem von mir verwendeten ähnelt.
Ich habe mich von @ Dtipsons Kommentar zur Antwort von @Mumthezir VP inspirieren lassen.
Ich benutze dafür zwei Eingaben, eine ist eine gefälschte Eingabe, mit
type="text"
der ich den Platzhalter setze, die andere ist das reale Feld mittype="date"
.Bei dem
mouseenter
Ereignis in ihrem Container verstecke ich die gefälschte Eingabe und zeige die echte, und bei demmouseleave
Ereignis mache ich das Gegenteil . Offensichtlich lasse ich die reale Eingabe sichtbar, wenn ein Wert darauf eingestellt ist.Ich habe den Code geschrieben, um reines Javascript zu verwenden, aber wenn Sie jQuery verwenden (das tue ich), ist es sehr einfach, ihn zu "konvertieren".
Ich habe dies auch auf einem Android-Handy getestet und es funktioniert, wenn der Benutzer auf das Feld tippt, wird der Datepicker angezeigt. Die einzige Sache ist, wenn die reale Eingabe keinen Wert hatte und der Benutzer die Datumsauswahl schließt, ohne ein Datum auszuwählen, bleibt die Eingabe sichtbar, bis sie außerhalb tippen. Es gibt kein Ereignis zum Anhören, um zu erfahren, wann der Datepicker geschlossen wird, daher weiß ich nicht, wie ich das lösen soll.
Ich habe kein iOS-Gerät, auf dem ich es testen kann.
quelle
Hier ist der Ansatz, um die Lösung von @ mvp mit Blick auf unauffälliges Javascript zu erweitern:
HTML:
Javascript:
quelle
Ich denke, alles, was Sie tun müssen, ist, das Modell so zu ändern, dass das Datumsfeld nullwertfähig ist, und dann [Erforderlich] darauf zu setzen, wenn es erforderlich ist. In diesem Fall wird der Platzhaltertext angezeigt.
quelle
Hey, also bin ich letzte Nacht auf dasselbe Problem gestoßen und habe herausgefunden, dass eine Kombination aus all deiner Antwort und etwas funkelnder Magie einen guten Job macht:
Der HTML:
Das CSS:
Die jQuery:
Erläuterung: Also, was hier passiert, vor allem im HTML , ist dies ziemlich einfach, indem Sie einfach eine grundlegende HMTL5-Datumseingabe durchführen und einen Platzhalter setzen. Nächster Stopp: CSS , wir setzen ein: Vor-Pseudo-Element, um unseren Platzhalter zu fälschen. Es übernimmt lediglich das Attribut des Platzhalters aus der Eingabe selbst. Ich habe dies nur ab einer Ansichtsfensterbreite von 1024px verfügbar gemacht - warum ich es später erzählen werde. Und jetzt die jQuery , nachdem ich ein paar Mal umgestaltet habe, habe ich mir diesen Code ausgedacht, der bei jeder Änderung überprüft, ob ein Wert festgelegt ist oder nicht, wenn dies nicht der Fall ist, wird die Klasse (erneut) hinzugefügt, und umgekehrt .
KENNEN SIE FRAGEN:
hoffentlich hilft das! Cheerio!
quelle
Wenn Sie sich nur mit Mobilgeräten beschäftigen:
quelle
HTML:
JavaScript:
quelle
Hier ist ein weiterer möglicher Hack, der kein js verwendet und dennoch CSS verwendet
content
. Beachten Sie, dass:after
wir die Eingabe auf eine andere Weise auswählen müssen , da dies in einigen Browsern für Eingaben nicht unterstützt wirdcontent attr('')
quelle
Dies funktioniert bei mir als Eingabeelement:
Dieses CSS zeigt einen permanenten Platzhalter. Der ausgewählte Wert wird nach dem Platzhalter angezeigt.
Ich verwende diese Lösung für ein Wordpress-Formular mit Kontaktformular-7-Plugin.
quelle
Keine der Lösungen funktionierte für mich unter Chrome in iOS 12 ordnungsgemäß, und die meisten von ihnen sind nicht auf mögliche Eingaben mit mehreren Daten auf einer Seite zugeschnitten. Ich habe Folgendes getan, wodurch im Grunde genommen eine gefälschte Beschriftung über der Datumseingabe erstellt und beim Tippen entfernt wird. Ich entferne auch das gefälschte Etikett, wenn die Breite des Ansichtsfensters mehr als 992 Pixel beträgt.
JS:
CSS:
quelle