Estou usando o jQuery Tools Validator, que implementa validações HTML5 através do jQuery. Tem funcionado muito bem até agora, exceto por uma coisa. Na especificação HTML5, o tipo de entrada "número" pode ter números inteiros e números de ponto flutuante. Isso parece incrivelmente míope, pois só será um validador útil quando os campos do banco de dados tiverem números de ponto flutuante assinados (para entradas não assinadas, você precisará voltar à validação "padrão" e, assim, perder recursos extras, como cima e para baixo setas para navegadores compatíveis). Existe outro tipo de entrada ou talvez um atributo que restrinja a entrada a números inteiros não assinados? Não encontrei nada, obrigado.
EDITAR
Ok, pessoal, eu aprecio seu tempo e ajuda, mas vejo muitas votações não merecidas acontecendo: D. Definir a etapa como 1 não é a resposta, pois não restringe a entrada. Você ainda pode digitar um número de ponto flutuante negativo na caixa de texto. Além disso, estou ciente da validação de padrões (mencionei isso no meu post original), mas isso não fazia parte da pergunta. Eu queria saber se o HTML5 permitiu restringir uma entrada do tipo "número" a valores inteiros positivos. Para essa pergunta, a resposta, ao que parece, seria "não, não". Eu não queria usar a validação de padrão porque isso causa algumas desvantagens ao usar a validação do jQuery Tools, mas agora parece que a especificação não permite uma maneira mais limpa de fazer isso.
fonte
number
entrada (pelo menos no FF / Chrome / Safari) agora só aceita números inteiros por padrão, a menos que você defina um valor explícito para ostep
attr que permita valores decimais; por exemplo:step="0.01"
. MDN documentado aqui . Em duas mentes sobre isso, porque eu acho que é um padrão sensato, mas também uma mudança radical (sim, isso afetou algum código que escrevi).Respostas:
https://www.w3.org/wiki/HTML/Elements/input/number
O melhor que você pode alcançar apenas com HTML
fonte
min
a1
como ele quer números positivos (e números não não negativos).<input type="number" min="0" step="1"/>
é a resposta mais correta para a pergunta. Enfim, qual é o sentido de ter os doisstep="1"
epattern="\d+"
? Não consigo digitar números de ponto flutuante nos dois casos.Defina o
step
atributo para1
:Isso parece um pouco problemático no Chrome agora, então pode não ser a melhor solução no momento.
Uma solução melhor é usar o
pattern
atributo, que usa uma expressão regular para corresponder à entrada:\d
é a expressão regular de um número,*
significa que ele aceita mais de um deles. Aqui está a demonstração: http://jsfiddle.net/b8NrE/1/fonte
number
que contém outros caracteres, o Chrome exibirá uma mensagem de erro.submit
seja o de acionar a postagem./\d*/.test(1.1) // true
pattern="\d*"
não é o mesmo que/\d*/
,pattern="\d*"
é igual a/^(?:\d*)$/
, por favor consulte o HTML5 padrão documentação atributo .Usando esse código, a entrada no campo de texto limita a digitação de apenas dígitos. Padrão é o novo atributo disponível no HTML 5.
Doc do atributo padrão
fonte
A maneira mais fácil usando JavaScript:
fonte
replace(/(\..*)\./g, '$1')
.
apenas uma vez, por exemplo,123.556
pode ser gravado.O padrão é bom, mas se você deseja restringir a entrada para números apenas com type = "text", pode usar oninput e um regex como abaixo:
Eu esquenta para mim :)
fonte
Isto não é apenas para html5, todo o navegador está funcionando bem. tente isso
fonte
oninput
vezOs padrões são sempre preferíveis à restrição, tente
oninput
emin
ocorra 1 para inserir apenas números de 1 em diantefonte
você já tentou configurar o
step
atributo para 1 como estefonte
Talvez não se ajuste a todos os casos de uso, mas
pode fazer um bom trabalho: violino .
Verifique a documentação .
fonte
Sim, o HTML5 faz. Experimente este código ( w3school ):
Veja o parâmetro mínimo e máximo? Eu tentei usando o Chrome 19 (funcionou) e o Firefox 12 (não funcionou).
fonte
Basta colocá-lo no seu campo de entrada:
onkeypress='return event.charCode >= 48 && event.charCode <= 57'
fonte
Eu estava trabalhando no Chrome e tive alguns problemas, apesar de usar atributos html. Acabei com este código js
fonte
Set
step="any"
. Funciona bem. Referência: http://blog.isotoma.com/2012/03/html5-input-typenumber-and-decimalsfloats-in-chrome/fonte
Das especificações
Então você pode simplesmente configurá-lo para
1
:fonte
Defina o
step
atributo como qualquer número flutuante, por exemplo, 0,01 e você estará pronto.fonte
fonte
Atualmente, não é possível impedir que um usuário grave valores decimais em sua entrada apenas com HTML. Você precisa usar o javascript.
fonte
fonte
No futuro ™ (consulte Can I Use ), nos agentes de usuário que apresentam um teclado para você, você pode restringir uma entrada de texto apenas a números
input[inputmode]
.fonte
inputmode
é principalmente para dispositivos portáteis e acionará o layout de teclado correto, mas para computadores "normais" com teclados, isso não impedirá a entrada do que você deseja.