Jak wymusić klawiaturę z numerami w witrynie mobilnej w systemie Android

94

Mam witrynę mobilną i zawiera ona inputelementy HTML , na przykład:

<input type="text" name="txtAccessoryCost" size="6" />

Osadziłem tę witrynę w WebViewcelu możliwego wykorzystania Androida 2.1, więc będzie to również aplikacja na Androida.

Czy można uzyskać klawiaturę z cyframi zamiast domyślnej z literami, gdy ten inputelement HTML jest aktywny?

A może można to ustawić dla całej aplikacji (może coś w pliku Manifest ), jeśli nie jest to możliwe dla elementu HTML?

ncakmak
źródło
Jeśli chcesz mieć klawiaturę numeryczną na iOS oprócz Androida, powinieneś to zrobić: stackoverflow.com/a/31619311/806956
Aaron Gray
2
inputmode="number"Atrybut wydaje się poprawnej odpowiedzi pod koniec 2019 roku: developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/... . Najwyższa głosowana odpowiedź w czasie tego komentarza sugeruje type="number", co wiąże się z pewnymi własnymi pułapkami; inputmodewydaje się wpływać tylko na wyświetlanie wirtualnej klawiatury, a nie na zachowanie / ograniczenia samego wejścia.
SheffDoinWork

Odpowiedzi:

114
<input type="number" />
<input type="tel" />

Oba przedstawiają klawiaturę numeryczną, gdy wejście staje się aktywne.

<input type="search" /> pokazuje normalną klawiaturę z dodatkowym przyciskiem wyszukiwania

Wszystko inne wydaje się wywoływać standardową klawiaturę.

Richard Kernahan
źródło
Przyjrzymy się temu dzisiaj, a następnie poinformuję Cię, czy to zadziała. Dziękuję, Richard!
ncakmak
1
Cześć Richard. Żadne nie działało, pole wprowadzania nadal otwiera standardową klawiaturę.
ncakmak
1
Zauważ, że klawiatura dla type="tel"jest gorsza do wpisywania liczb niż klawiatura dla type="number".
Rory O'Kane
2
<input type="text" pattern="\d*" /> wyświetla również klawiaturę numeryczną, ale tylko w systemie iOS, a nie w systemie Android .
Rory O'Kane
52

WAŻNA UWAGA

Piszę to jako odpowiedź, a nie komentarz, ponieważ jest to dość ważna informacja i przyciągnie więcej uwagi w tym formacie.

Jak wskazywali inni kolesie, możesz zmusić urządzenie do pokazania ci klawiatury numerycznej z type="number"/ type="tel", ale muszę podkreślić, że musisz być bardzo ostrożny.

Jeśli ktoś spodziewa się liczby zaczynającej się od zer, na przykład 000222, prawdopodobnie będzie miał problem, ponieważ niektóre przeglądarki (na przykład Chrome na komputery stacjonarne) wyślą na serwer 222, co nie jest tym, czego chce.

O type="tel"czymś podobnym nie mogę powiedzieć, ale osobiście go nie używam, ponieważ jego zachowanie na różnych telefonach może się różnić. Ograniczyłem się do prostych, pattern="[0-9]*"które nie działają na Androidzie

user907860
źródło
4
Automatyczne ponowne formatowanie prawdopodobnie nie nastąpi w przypadku plików type="tel". Specyfikacja zauważa, że telnie numbernarzuca żadnej szczególnej składni, w przeciwieństwie do tego , który wymaga, aby jej wartość była prawidłową liczbą zmiennoprzecinkową .
Rory O'Kane
Jak bardzo jest źle? Próbujemy przyspieszyć proces tworzenia formularzy dla naszych klientów mobilnych i wydaje się to oczywistym rozwiązaniem, ale chcemy też czegoś niezawodnego. Wysłałeś stanowcze ostrzeżenie przed użyciem tej metody. Zastanawiam się, czy mógłbyś rozwinąć trochę więcej na ten temat?
Philll_t
@Philll_t, użytkownik musi wysłać dane „000222”, ale Ty po stronie serwera otrzymujesz „222”. Czy nie widzisz, że funkcjonalność jest całkowicie zepsuta? Serwer otrzymuje błędne dane.
user907860
Tak, rozumiem, co masz na myśli, ale mówię tylko: jaki procent użytkowników to widzi? Czy jest to problem w głównych przeglądarkach mobilnych, takich jak Safari i Chrome? Skąd wiesz, że to problem, czy istnieje link, który możesz podać. Wierzę ci, chcę tylko zbadać siebie i nie widziałem nic, co by to sugerowało, może wskażesz mi właściwy kierunek. Próbujemy tylko sprawdzić, czy nasza baza klientów nie skorzysta na tym.
Philll_t
1
@Philll_t Myślę, że najlepszym przykładem tego ostrzeżenia są pola wejściowe Data urodzenia. Gdzie trzeba ręcznie wprowadzić dzień, miesiąc i rok. I tak, nadal wiele stron internetowych używa tego stylu zamiast powszechnie używanych selektorów dat. Jeśli chodzi o problem z polami wprowadzania daty urodzenia, to kiedy wprowadzasz dzień lub miesiąc zaczynający się od „0”, np. 08.
Robin Carlo Catacutan
9

To powinno działać. Ale mam te same problemy na telefonie z Androidem.

<input type="number" /> <input type="tel" />

Dowiedziałem się, że jeśli nie włączyłem frameworka jquerymobile, klawiatura wyświetlała się poprawnie na dwóch typach pól.

Ale nie znalazłem rozwiązania tego problemu, jeśli naprawdę potrzebujesz użyć jquerymobile.

UPDATE: Dowiedziałem się, że jeśli tag formularza jest przechowywany poza plikiem

<div data-role="page"> 

Klawiatura numeryczna nie jest wyświetlana. To musi być błąd ...

Jesper Grann Laursen
źródło
Dzięki, że się w to zagłębiłeś. Nie jestem pewien, czy rozumiem: „jeśli tag-formularza jest przechowywany poza div [data-role = page]”. W moim przypadku problem występuje z formularzami, które są ładnie zagnieżdżone w div [data-role = page]. Być może problem polega na tym, że te strony są wyświetlane w moim przypadku jako okna dialogowe?
Wytze
9

inputmodezgodnie ze specyfikacją WHATWG jest metodą domyślną.

W przypadku urządzeń z systemem iOS patternmoże również pomóc dodanie .

Aby zapewnić zgodność z poprzednimi wersjami, użyj ich typerównież, ponieważ Chrome używa ich od wersji 66.

<input
  inputmode="numeric"
  pattern="[0-9]*"
  type="number"
/>
Reza Ghorbani
źródło
1
Dzięki za odpowiedź, szukałem decimali znalazłem ją tutaj developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/…
Rami Alloush
3

Niektóre przeglądarki wysyłają zero początkowe do serwera, gdy typ wejściowy to „liczba”. Więc używam mieszania jquery i html, aby załadować klawiaturę numeryczną, a także upewniam się, że wartość jest wysyłana jako tekst, a nie jako liczba:

$(document).ready(function(){
$(".numberonly").focus(function(){$(this).attr("type","number")});
$(".numberonly").blur(function(){$(this).attr("type","text")});
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" class="numberonly">

Ali Sheikhpour
źródło
3
Powoduje to irytujący problem w przeglądarce Chrome na Androida. Po dotknięciu wejścia klawiatura nie podnosi się. Następnie musisz ponownie dotknąć pola tekstowego, a klawiatura pojawi się z klawiaturą tylko numeryczną. Naprawdę chciałbym, żebyśmy mieli taką type="digits"opcję, żebyśmy nie musieli mieć tych hacków. Chodzi mi o to, że nie jest tak, że liczba wiodąca zera jest tak rzadka (kody pocztowe w USA są oczywistym przykładem).
Jaxidian
2
Ja też mam ten sam problem! ustawienie pola na "type = tel" jest jak dotąd najlepszym rozwiązaniem.
Ali Sheikhpour
-2

input type = number

Jeśli chcesz wprowadzić liczbę, możesz użyć wartości atrybutu input type = "number" HTML5.

<input type="number" name="n" />

Oto klawiatura, która pojawia się na iPhonie 4:

Zrzut ekranu iPhone'a z numerem typu wejścia HTML5 Android 2.2 używa tej klawiatury dla type = number:

Zrzut ekranu Androida z numerem typu wejścia HTML5

avinash pandit
źródło