Come forzare la tastiera con i numeri nel sito Web mobile in Android


92

Ho un sito web per dispositivi mobili e contiene alcuni inputelementi HTML , come questo:

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

Ho incorporato il sito in un WebViewpossibile consumo di Android 2.1, in modo che sia anche un'applicazione Android.

È possibile ottenere la tastiera con i numeri invece di quella predefinita con le lettere quando questo inputelemento HTML è focalizzato?

Oppure è possibile impostarlo per l'intera applicazione (forse qualcosa nel file Manifest ), se non è fattibile per un elemento HTML?


Se desideri un tastierino numerico su iOS oltre ad Android, dovresti farlo: stackoverflow.com/a/31619311/806956
Aaron Gray

2
L' inputmode="number"attributo sembra la risposta corretta alla fine del 2019: developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/… . La risposta più votata al momento di questo commento suggerisce type="number", che viene fornito con alcune delle sue insidie; inputmodesembra avere un impatto solo sulla visualizzazione della tastiera virtuale, piuttosto che sul comportamento / vincoli dell'input stesso.
SheffDoinWork

Risposte:


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

Entrambi presentano il tastierino numerico quando l'input diventa attivo.

<input type="search" /> mostra una tastiera normale con un pulsante di ricerca aggiuntivo

Tutto il resto sembra far apparire la tastiera standard.


Lo esamineremo oggi e poi ti farò sapere se funzionerà. Grazie, Richard!
ncakmak

1
Ciao Richard. Nessuno ha funzionato, il campo di input sta ancora aprendo la tastiera standard.
ncakmak


1
Nota che la tastiera per type="tel"è peggiore per digitare numeri rispetto alla tastiera per type="number".
Rory O'Kane

2
<input type="text" pattern="\d*" /> fa apparire anche la tastiera numerica, ma solo su iOS, non su Android .
Rory O'Kane

51

NOTA IMPORTANTE

Sto postando questo come una risposta, non come un commento, poiché è un'informazione piuttosto importante e attirerà più attenzione in questo formato.

Come altri hanno sottolineato, puoi forzare un dispositivo a mostrarti una tastiera numerica con type="number"/ type="tel", ma devo sottolineare che devi essere estremamente cauto con questo.

Se qualcuno si aspetta un numero che inizia con zero, ad esempio 000222, è probabile che abbia problemi, poiché alcuni browser (Chrome desktop, ad esempio) invieranno al server 222, che non è quello che vuole.

A proposito type="tel"non posso dire nulla di simile ma personalmente non lo uso, in quanto il suo comportamento su telefoni diversi può variare. Mi sono limitato ai semplici pattern="[0-9]*"che non funzionano su Android


4
La riformattazione automatica probabilmente non avviene con type="tel". La specifica nota che telnon applica alcuna sintassi particolare, a differenza di number, che richiede che il suo valore sia un numero a virgola mobile valido .
Rory O'Kane

Quanto è cattivo? Stiamo cercando di accelerare il processo del modulo per i nostri clienti mobili e questa sembra una soluzione ovvia, ma vogliamo anche qualcosa di affidabile. Hai pubblicato un forte avvertimento contro l'utilizzo di questo metodo. Mi chiedo se potresti approfondire un po 'di più su questo?
Philll_t

@Philll_t, un utente deve inviare i dati "000222", ma tu sul lato server ottieni invece "222". Non vedi che la funzionalità è completamente rotta? Il server riceve dati errati.
user907860

Sì, capisco cosa intendi, ma quello che sto dicendo è questo: quale percentuale di utenti lo vede? È un problema sui principali browser mobili come Safari e Chrome? Come fai a sapere che questo è un problema? C'è un link che puoi fornire. Ti credo, voglio solo fare delle ricerche da solo e non ho visto nulla che lo suggerisca, forse puoi indicarmi la giusta direzione. Stiamo solo cercando di vedere se la nostra base di clienti non ne trarrà vantaggio.
Philll_t

1
@Philll_t Penso che il miglior esempio di questo avviso sia per i campi di input Data di nascita. Dove è necessario inserire manualmente il giorno, il mese e l'anno. E sì, ci sono ancora molti siti web che usano questo stile invece dei selettori di date comunemente usati. Per quanto riguarda il problema sui campi di immissione della data di nascita, è quando inserisci il tuo giorno o mese che inizia con "0", ad esempio 08.
Robin Carlo Catacutan

9

Questo dovrebbe funzionare. Ma ho gli stessi problemi su un telefono Android.

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

Ho scoperto che se non includevo il jquerymobile-framework, la tastiera veniva visualizzata correttamente sui due tipi di campi.

Ma non ho trovato una soluzione per risolvere questo problema, se hai davvero bisogno di usare jquerymobile.

AGGIORNAMENTO: Ho scoperto che se il form-tag è memorizzato fuori dal file

<div data-role="page"> 

Il tastierino numerico non viene visualizzato. Deve essere un bug ...


Grazie per aver approfondito questo aspetto. Non sono sicuro di aver capito però: "se il form-tag è memorizzato fuori dal div [data-role = page]". Nel mio caso il problema si verifica con form che sono ben nidificati all'interno di un div [data-role = page]. Forse il problema è che queste pagine vengono visualizzate, nel mio caso, come finestre di dialogo?
Wytze

7

inputmodesecondo le specifiche WHATWG è il metodo predefinito.

Per i dispositivi iOS che aggiungono pattern potrebbe essere utile anche l' .

Per la compatibilità con le versioni precedenti, utilizzali typeanche poiché Chrome li utilizza a partire dalla versione 66.

<input
  inputmode="numeric"
  pattern="[0-9]*"
  type="number"
/>

Grazie per la risposta, stavo cercando decimale l'ho trovata qui developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/…
Rami Alloush

3

Alcuni browser igoner inviano uno zero iniziale al server quando il tipo di input è "numero". Quindi uso un mix di jquery e html per caricare un tastierino numerico e assicurarmi anche che il valore venga inviato come testo e non come numero:

$(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">


3
Ciò causa un fastidioso problema su Chrome per Android. Quando tocchi l'input, la tastiera non viene visualizzata. È quindi necessario toccare la casella di testo una seconda volta e quindi la tastiera viene visualizzata con la tastiera solo numerica. Vorrei davvero che avessimo type="digits"un'opzione in modo da non dover avere questi hack. Voglio dire, non è che un numero iniziale zero sia così raro (i codici postali negli Stati Uniti sono un ovvio esempio).
Jaxidian

2
Anch'io devo affrontare lo stesso problema! l'impostazione del campo su "type = tel" è ancora la soluzione migliore.
Ali Sheikhpour

-2

input type = number

Quando si desidera fornire un input numerico, è possibile utilizzare il valore dell'attributo HTML5 input type = "number".

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

Ecco la tastiera che compare su iPhone 4:

Screenshot iPhone del numero di tipo di input HTML5 Android 2.2 utilizza questa tastiera per type = number:

Screenshot Android del numero del tipo di input HTML5


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.