2013-05-09 28 views
9

Si noti che usando input type="number" può visualizzare una tastiera numerica, come di seguito:Mostra tastiera numerica a iPhone utilizzando il testo di input

enter image description here

E 'possibile utilizzare input type="text" per visualizzare la stessa tastiera numerica? I non non desidera visualizzare un tastierino numerico utilizzando pattern="\d*" perché è possibile che il valore conterrà una posizione decimale.

La ragione per cui mi piacerebbe utilizzare input type="text" anziché input type="number" è che non riesco a recuperare il valore se inserisco un non numero per un campo numerico. Ad esempio, se immetto ABC, diventerà automaticamente vuoto. Mi sembra che usare input type="text" sarà più facile per questo tipo di controllo.

+0

Cosa c'è di sbagliato con l'utilizzo di 'type = "numero"'? – deceze

+0

Hi deceze, ho risolto la mia domanda. Grazie. – red23jordan

+3

Esiste, in HTML5.1, un attributo chiamato ["inputmode"] (http://www.w3.org/html/wg/drafts/html/master/forms.html#attr-fe-inputmode) che è il modo previsto di sostenere questo. Quindi avresti '' Tuttavia, non è elencato in HTML5, quindi suppongo che non sia attualmente implementato molto se non del tutto. – Alohci

risposta

0

Non riuscivo a trovare alcuna soluzione per quello al momento.

Ma un possibile trucco che potresti fare è usare type = "number" e cambiarlo in javascript con document.getElementById ("elemento"). Type = "text";

ma tuttavia questo potrebbe anche cancellare l'ABC ma sarebbe accettare numeri virgole decimali

+0

Sì, l'ho usato ma la tastiera diventa la tastiera predefinita e la tastiera numerica non è stata aperta: ( – red23jordan

+0

controlla qui http://jsfiddle.net/svenkatreddy/REHyd/ Con questo è possibile ottenere la tastiera numerica e il tipo di input è ancora "testo" ma comunque non accetta gli Alfabeti (ABC verrà cancellato) e la tastiera numerica verrà visualizzata solo la prima volta, se lo desideri per più volte, ti basta memorizzare il valore di input nella variabile e riconvertire in input type "number" Mi dispiace ma questo è l'unico trucco disponibile al momento. –

1

Ci sono altri tipi che possono visualizzare la tastiera numerica.

Con type = "numero" non puoi fare nulla. Non accetterà nulla se non i numeri. Ma se usi type = "tel", è un brutto trucco, ma funziona.

Ecco il mio esempio di codice di avviamento postale:

<input type="tel" id="Address_ZipCode" class="zip-code" pattern="^\d{2}-\d{3}$" maxlength="6"> 

Ci sarà comunque un problema con tasto "-" su alcune tastiere schermo, è possibile aggirare il problema con l'aggiunta del trattino dopo il numero di caratteri specificati in JavaScript così:

// Zip Code dashes 
$('input[type="tel"].zipCode').keyup(function(event) { 
    var t = event.target, v = t.value; 
    if (v.length == 2) { t.value = v + '-'; } 
}); 

(Si prega di scusare jQuery). Invece di usare type = "tel" puoi usare type = "text" e la proprietà pattern, ma non l'ho ancora testata. Molto probabilmente non funzionerebbe con la maggior parte dei browser.

+2

utilizzando type = "tel" su iphone fa apparire una tastiera che non ha modo di inserire una virgola decimale – anztenney

10

Se l'input è un numero vero, intero o decimale, utilizzare l'input HTML5 type="number". Questo farà apparire la tastiera corretta sui dispositivi Android (si presuma anche il telefono Windows).

Quindi il trucco è di posizionare un pattern="[0-9]*" su quell'attributo per forzare lo speciale tastierino numerico su iOS. Si noti che:

  1. Questo non segnerà un decimale o meno firmare come non valido perché l'attributo modello è actualy non validi su un campo = "numero" di tipo! e
  2. Questo è il SOLO modo per ottenere la tastiera numerica iOS. Guarda la differenza tra la sezione numero della tastiera alfa (come nella tua schermata qui sopra) rispetto alla tastiera numerica vera.

iOS number keyboards compared

Un'ultima nota, assicurarsi di non utilizzare il campo numero del tipo per gli ingressi che non sono veri e propri numeri (ad es. Zipcodes con zeri o codici prodotto con coma o spazi). Un campo di inserimento numerico NON PU SUB INVIARE valori che non sono numeri veri! (a seconda del browser/dispositivo)

0

Prova questo workarround. Ha funzionato per me

Trasformerà il tipo in numero, quindi tornerà al testo. Questo costringerà iOS a passare alla tastiera numerica sul primo cambio di scena. Il setSelectionRange serve per selezionare il valore di input.

$(function(){ 

    $("input[type='text']").on('mouseup', function(e){ 
     e.preventDefault(); 
    }); 

    $("input[type='text']").on('focus click', function(e){ 
     $(this).prop('type', 'number'); 
     var obj = $(this); 
     setTimeout(function(){ 
      obj.prop('type', 'text'); 
      document.getElementById(obj.attr('id')).setSelectionRange(0, 9999); 
     }, 50);  
    }); 
}); 
1

uso di questo codice:

<input type="number" pattern="[0-9]*" /> 
Problemi correlati