Como forçar teclado com números em site móvel no Android

91

Tenho um site para celular e contém alguns inputelementos HTML , como este:

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

Eu embuti o site em um WebViewpara possível consumo do Android 2.1, de modo que também será um aplicativo Android.

É possível obter o teclado com números em vez do padrão com letras quando este inputelemento HTML está focado?

Ou é possível configurá-lo para todo o aplicativo (talvez algo no arquivo Manifest ), se não for viável para um elemento HTML?

ncakmak
fonte
Se quiser um teclado numérico no iOS além do Android, você deve fazer o seguinte: stackoverflow.com/a/31619311/806956
Aaron Gray
2
O inputmode="number"atributo parece ser a resposta correta no final de 2019: developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/… . A resposta mais votada no momento deste comentário sugere type="number", o que vem com algumas de suas próprias armadilhas; inputmodeparece impactar apenas a tela do teclado virtual, ao invés do comportamento / restrições da própria entrada.
SheffDoinWork

Respostas:

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

Ambos apresentam o teclado numérico quando a entrada ganha o foco.

<input type="search" /> mostra um teclado normal com um botão de pesquisa extra

Todo o resto parece trazer à tona o teclado padrão.

Richard Kernahan
fonte
Vou dar uma olhada nele hoje e, em seguida, vou deixar você saber se isso funcionaria. Obrigada, Richard!
ncakmak
1
Oi Richard. Nenhum funcionou, o campo de entrada ainda está abrindo o teclado padrão.
ncakmak
1
Observe que o teclado para type="tel"é pior para digitar números do que o teclado para type="number".
Rory O'Kane de
2
<input type="text" pattern="\d*" /> também traz o teclado numérico, mas apenas no iOS, não no Android .
Rory O'Kane de
50

NOTA IMPORTANTE

Estou postando isso como uma resposta, não como um comentário, pois é uma informação bastante importante e vai atrair mais atenção neste formato.

Como outros colegas apontaram, você pode forçar um dispositivo a mostrar um teclado numérico com type="number"/ type="tel", mas devo enfatizar que você deve ser extremamente cauteloso com isso.

Se alguém espera um número que começa com zeros, como 000222, provavelmente terá problemas, pois alguns navegadores (desktop Chrome, por exemplo) enviarão para o servidor 222, o que não é o que ela deseja.

Sobre type="tel"Não posso dizer nada parecido, mas pessoalmente não uso, pois seu comportamento em telefones diferentes pode variar. Limitei-me ao simples pattern="[0-9]*"que não funciona no Android

user907860
fonte
4
A reformatação automática provavelmente não acontece com type="tel". As notas de especificação que telnão impõem nenhuma sintaxe particular, ao contrário de number, que requer que seu valor seja um número de ponto flutuante válido .
Rory O'Kane de
Está muito ruim? Estamos tentando acelerar o processo de formulário para nossos clientes móveis e isso parece uma solução óbvia, mas também queremos algo confiável. Você postou um forte aviso contra o uso desse método. Será que você poderia elaborar um pouco mais sobre isso?
Philll_t
@Philll_t, um usuário precisa enviar dados '000222', mas você, no lado do servidor, obtém '222'. Você não vê que a funcionalidade está completamente quebrada? O servidor obtém dados errados.
user907860
Sim, entendo o que você quer dizer, mas o que estou dizendo é que: que porcentagem de usuários vê isso? Este é um problema nos principais navegadores móveis, como Safari e Chrome? Como você sabe se isso é um problema? Existe um link que você possa fornecer. Eu acredito em você, eu só quero pesquisar por mim mesmo e não vi nada sugerindo isso, talvez você possa me apontar na direção certa. Estamos apenas tentando ver se nossa base de clientes não se beneficiará com isso.
Philll_t
1
@Philll_t Acho que o melhor exemplo para esse aviso é para os campos de entrada Data de nascimento. Onde você precisa inserir manualmente o dia, mês e ano. E sim, ainda há muitos sites que usam esse estilo em vez dos selecionadores de data comumente usados. Em relação ao problema nos campos de entrada de Data de Nascimento, é quando você insere seu Dia ou Mês começando com "0", por exemplo, 08.
Robin Carlo Catacutan
8

Isso deve funcionar. Mas tenho os mesmos problemas em um telefone Android.

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

Eu descobri que se eu não incluísse o framework jquerymobile, o teclado era mostrado corretamente nos dois tipos de campos.

Mas eu não encontrei uma solução para resolver esse problema, se você realmente precisa usar o jquerymobile.

ATUALIZAÇÃO: descobri que se a tag do formulário for armazenada fora do

<div data-role="page"> 

O teclado numérico não é mostrado. Deve ser um bug ...

Jesper Grann Laursen
fonte
Obrigado por se aprofundar nisso. Não tenho certeza se entendi: "se a tag do formulário for armazenada fora da div [data-role = page]". No meu caso, o problema ocorre com formulários que estão bem aninhados em uma div [data-role = page]. Talvez o problema seja que essas páginas estão sendo exibidas, no meu caso, como diálogos?
Wytze
6

inputmodede acordo com a especificação WHATWG é o método padrão.

Para dispositivos iOS, adicionar patterntambém pode ajudar.

Para compatibilidade com versões anteriores, use typetambém, uma vez que o Chrome os usa a partir da versão 66.

<input
  inputmode="numeric"
  pattern="[0-9]*"
  type="number"
/>
Reza Ghorbani
fonte
Obrigado pela resposta, estava procurando decimale encontrei aqui developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/…
Rami Alloush
2

Alguns navegadores ignoram o envio de zero à esquerda para o servidor quando o tipo de entrada é "número". Então, eu uso uma mistura de jquery e html para carregar um teclado numérico e também me certifico de que o valor seja enviado como um texto, não como um número:

$(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
fonte
3
Isso causa um problema irritante no Chrome para Android. Quando você toca na entrada, o teclado não aparece. Você deve então tocar na caixa de texto uma segunda vez e então o teclado aparecerá com o teclado apenas numérico. Eu realmente gostaria que tivéssemos uma type="digits"opção para não precisarmos desses hacks. Quero dizer, não é como se um número zero à esquerda fosse tão raro (os códigos postais nos EUA são um exemplo óbvio).
Jaxidian
2
Eu também enfrento o mesmo problema! definir o campo como "type = tel" é a melhor solução ainda.
Ali Sheikhpour
-2

input type = number

Quando quiser fornecer uma entrada numérica, você pode usar o valor de atributo HTML5 input type = "number".

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

Aqui está o teclado que vem no iPhone 4:

Captura de tela do iPhone do número do tipo de entrada HTML5 Android 2.2 usa este teclado para type = number:

Captura de tela do Android do número do tipo de entrada HTML5

Pandit avinash
fonte