Robię aplikację phonegap. Kiedy próbuję type="date"
pole wprowadzania, jak pokazano poniżej, pokazuje selektor dat w iPhonie, zgodnie z oczekiwaniami, ale nie pokazuje symbolu zastępczego, który podałem. Znalazłem ten sam problem w SO, ale nigdzie nie ma rozwiązania.
<input placeholder="Date" class="textbox-n" type="date" id="date">
html
cordova
datepicker
placeholder
Mumthezir VP
źródło
źródło
Odpowiedzi:
Może to nie jest właściwe ... ale pomogło mi.
źródło
Jeśli używasz metody mvp, ale dodasz zdarzenie onblur, aby zmienić je z powrotem w pole tekstowe, aby tekst zastępczy pojawił się ponownie, gdy pole wejściowe straci fokus. To tylko sprawia, że hack jest trochę przyjemniejszy.
Mam nadzieję że to pomoże.
źródło
Skończyło się na użyciu następujących.
Odnośnie komentarza (ów) Firefoksa: Ogólnie, Firefox nie wyświetla żadnego tekstu zastępczego dla danych wejściowych typu data. Ale ponieważ jest to pytanie dotyczące Cordova / PhoneGap, nie powinno to budzić obaw (chyba że chcesz tworzyć oprogramowanie przeciwko FirefoxOS).
źródło
<input type="date" placeholder="MY PLACEHOLDER" onchange="this.classList.toggle('has-value',this.value);">
input[type="date"]:not(:focus):not(.has-value):before
aby pokazać format, gdy wejście jest skoncentrowane (dla osób, któreUżyłem tego w moim css:
i wstaw coś takiego do javascript:
działa dla mnie na urządzenia mobilne (Ios8 i Android). Ale użyłem maski wprowadzania jQuery na pulpicie z typem tekstu wejściowego. To rozwiązanie to fajny sposób, jeśli twój kod działa na ie8.
źródło
color: #aaa
wyglądu podobnego do symbolu zastępczego na iOS.color: lightgray
jest po prostu za lekki.$("#myel").on( "input" , function(){ $(this).toggleClass( "full" , $(this).val().length > 0 ); });
Na dzień dzisiejszy (2016) z powodzeniem korzystałem z tych 2 fragmentów (plus działają świetnie z Bootstrap4).
Dane wejściowe po lewej stronie, symbol zastępczy po lewej
Symbol zastępczy znika po kliknięciu
źródło
Zgodnie ze standardem HTML :
źródło
Mi to pasuje:
źródło
:after
pseudoelement zniknie po wybraniu daty. Nie ma więc potrzeby usuwaniaonfocus="(this.placeholder='')"
aby usunąć symbol zastępczy po wybraniu daty.Użyłem tej odrobiny jQuery: http://jsfiddle.net/daviderussoabram/65w1qhLz/
źródło
Bazując na odpowiedziach deadproxor i Alessio, spróbuję używać tylko CSS:
A jeśli chcesz, aby symbol zastępczy był niewidoczny po wpisaniu czegoś w danych wejściowych, możemy spróbować użyć selektorów: valid i: invalid, jeśli dane wejściowe są wymagane.
EDYTOWAĆ
Tutaj kod, jeśli używasz wymaganego w swoim wejściu:
źródło
Znalazłem lepszy sposób rozwiązania problemu. Myślę, że to ci pomoże. po wyostrzeniu pole zmieni tekst na tekst, aby wyświetlić symbol zastępczy. gdy jest skupiony, jego typ zmienia się na datę, więc zostanie wyświetlony widok kalendarza.
źródło
Wziąłem pomysł z jbarlow, ale dodałem if w funkcji onblur, więc pola zmieniają swój typ tylko wtedy, gdy wartość jest pusta
źródło
Rozwiązanie problemu w aktualnej poprawnej odpowiedzi „kliknięcie pola powoduje wyświetlenie klawiatury ekranowej zamiast selektora dat”:
Problem jest spowodowany tym, że przeglądarka zachowuje się zgodnie z typem danych wejściowych po kliknięciu (= tekst). Dlatego konieczne jest zaprzestanie koncentrowania się na elemencie wejściowym (rozmycie), a następnie programowe ponowne uruchomienie fokusu na elemencie wejściowym, który został zdefiniowany jako type = date przez JS w pierwszym kroku. Klawiatura wyświetla się w trybie numeru telefonu.
źródło
wypróbuj moje rozwiązanie. Używam atrybutu „required”, aby dowiedzieć się, czy dane wejściowe są wypełnione, a jeśli nie, pokazuję tekst z atrybutu „placeholder”
źródło
Zajęło mi to trochę czasu, wymyślenie tego, zostaw to jako
type="text"
i dodajonfocus="(this.type='date')"
, tak jak pokazano powyżej.Podobał mi się nawet wspomniany powyżej pomysł onBlur
<input placeholder="Date" class="textbox-n" type="text" onfocus="(this.type='date')" onblur="(this.type='text')" id="date">
Mam nadzieję, że pomoże to każdemu, kto nie do końca zrozumiał, co się dzieje powyżej
źródło
Podsumowując problem z wprowadzaniem dat:
Rozwiązaniem, które znalazłem spełniające te wymagania, jest użycie zwykłej sztuczki do stylizacji natywnych elementów formularza: upewnij się, że element jest wyświetlany, ale niewidoczny, i wyświetlaj jego oczekiwany styl za pomocą powiązanej etykiety . Zazwyczaj etykieta będzie wyświetlana jako dane wejściowe (łącznie z symbolem zastępczym), ale nad nią.
Tak więc HTML, taki jak:
Może być stylizowany na:
Każde zdarzenie (kliknięcie, fokus) na takiej skojarzonej etykiecie zostanie odzwierciedlone w samym polu, a więc wyzwoli interfejs wprowadzania daty.
Jeśli chcesz przetestować takie rozwiązanie na żywo, możesz uruchomić tę wersję Angulara ze swojego tabletu lub telefonu komórkowego.
źródło
Więc to, co postanowiłem zrobić, wreszcie jest tutaj i działa dobrze na wszystkich przeglądarkach mobilnych, w tym iPhone'ach i Androidach.
Data
źródło
Pracuję z ionicframework, a rozwiązanie dostarczone przez @Mumthezir jest prawie idealne. W przypadku, gdyby ktoś miał taki sam problem jak ja (po zmianie wejście jest nadal skupione, a przy przewijaniu wartość po prostu znika), więc dodałem onchange, aby zrobić input.blur ()
źródło
Możesz
lubię to...
źródło
Znalazłem lepszy sposób obsługi podstawowego rozumienia użytkownika przez najechanie kursorem myszy i otwarcie selektora daty po kliknięciu:
<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">
Ukryj również strzałkę webkit i ustaw ją w 100% tak, aby zakrywała kliknięcie:
źródło
Z kątowego punktu widzenia udało mi się umieścić symbol zastępczy w elemencie typu input data.
Przede wszystkim zdefiniowałem następujący css:
Powodem, dla którego jest to konieczne, jest to, że jeśli zawartość css3 ma inny kolor niż normalny symbol zastępczy, musiałem użyć zwykłego.
Następnie w szablonie zastosowano atrybut viewchild birthDate, aby móc uzyskać dostęp do tych danych wejściowych z komponentu. I zdefiniowałeś wyrażenie kątowe w atrybucie symbolu zastępczego, które zadecyduje, czy pokażemy symbol zastępczy, czy nie. Jest to główna wada rozwiązania polega na tym, że musisz zarządzać widocznością symbolu zastępczego.
źródło
Zmieniony kod mumthezir
źródło
Dziwię się, że istnieje tylko jedna odpowiedź z podejściem podobnym do tego, którego użyłem.
Inspirację zaczerpnąłem z komentarza @ Dtipson na temat odpowiedzi @Mumthezir VP.
Używam do tego dwóch wejść, jedno to fałszywe wejście,
type="text"
na którym ustawiam symbol zastępczy, drugie to prawdziwe poletype="date"
.W
mouseenter
przypadku wydarzenia na ich kontenerze ukrywam fałszywe dane wejściowe i pokazuję prawdziwe, a namouseleave
wydarzeniu robię odwrotnie . Oczywiście pozostawiam widoczne wejście rzeczywiste, jeśli ma ustawioną wartość.Napisałem kod, aby używać czystego Javascript, ale jeśli używasz jQuery (tak), bardzo łatwo jest go „przekonwertować”.
Przetestowałem to również na telefonie z Androidem i działa, gdy użytkownik dotknie pola, pojawi się datapicker. Jedyną rzeczą jest to, że jeśli rzeczywiste dane wejściowe nie mają wartości, a użytkownik zamyka DatePicker bez wybierania daty, dane wejściowe pozostaną widoczne, dopóki nie dotkną poza nim. Nie ma żadnego wydarzenia, którego można by słuchać, aby wiedzieć, kiedy datapicker zostanie zamknięty, więc nie wiem, jak to rozwiązać.
Nie mam urządzenia z systemem iOS, na którym mogę to przetestować.
źródło
Rozwijając rozwiązanie @ mvp z myślą o dyskretnym javascript, oto podejście:
HTML:
JavaScript:
źródło
Myślę, że wszystko, co musisz zrobić, to zmienić model, aby powiedzieć, że pole daty ma wartość null, a następnie umieścić na nim [Wymagane], jeśli jest wymagane. Jeśli to zrobisz, pojawi się tekst zastępczy.
źródło
Hej, więc zeszłej nocy natknąłem się na ten sam problem i wymyśliłem kombinację wszystkich twoich odpowiedzi i jakiejś błyszczącej magii wykonują dobrą robotę:
HTML:
CSS:
JQuery:
Wyjaśnienie: Tak więc, co się tutaj dzieje, przede wszystkim w HTML , jest to całkiem proste, wystarczy wykonać podstawowe wprowadzenie daty w HMTL5 i ustawić symbol zastępczy. Następny przystanek: CSS , ustawiamy pseudo-element: before-before, aby udawał nasz symbol zastępczy, po prostu pobiera atrybut symbolu zastępczego z samego wejścia. Udostępniłem to tylko od szerokości okna roboczego 1024px - dlaczego powiem później. A teraz jQuery , po kilkukrotnej refaktoryzacji wymyśliłem ten fragment kodu, który będzie sprawdzał przy każdej zmianie, czy jest ustawiona wartość, czy nie, jeśli nie, to (ponownie) doda klasę, odwrotnie .
ZNAJ PROBLEMY:
mam nadzieję, że to pomoże! cheerio!
źródło
Jeśli interesuje Cię tylko telefon komórkowy:
źródło
HTML:
JavaScript:
źródło
Oto kolejny możliwy hack, który nie używa js i nadal używa css
content
. Zauważ, że ponieważ:after
nie jest to obsługiwane w niektórych przeglądarkach dla danych wejściowych, musimy wybrać wejście w inny sposób, tak samo dlacontent attr('')
źródło
To działa dla mnie, używając tego jako elementu wejściowego:
Ten arkusz CSS pokazuje stały symbol zastępczy. Wybrana wartość jest wyświetlana po symbolu zastępczym.
Używam tego rozwiązania dla formularza Wordpress z wtyczką contact-form-7.
źródło
Żadne z rozwiązań nie działało poprawnie dla mnie w Chrome w iOS 12 i większość z nich nie jest dostosowana do ewentualnego wielokrotnego wprowadzania daty na stronie. Zrobiłem co następuje, co w zasadzie tworzy fałszywą etykietę na wejściu daty i usuwa ją po dotknięciu. Usuwam też fałszywą etykietę, jeśli szerokość widocznego obszaru przekracza 992px.
JS:
CSS:
źródło