Estou usando o ngChange no AngularJS para acionar uma função personalizada que removerá todas as letras que o usuário adicionar à entrada.
<input type="text" name="inputName" data-ng-change="numbersOnly()"/>
O problema é que preciso direcionar a entrada que foi acionada numbersOnly()
para poder remover as letras inseridas. Procurei muito no Google e não consegui encontrar nada sobre isso.
O que eu posso fazer?
javascript
angularjs
angularjs-directive
Chris Bier
fonte
fonte
Respostas:
Maneira fácil , use type = "number" se funcionar para seu caso de uso:
Outra maneira fácil: o ng-pattern também pode ser usado para definir uma regex que limitará o que é permitido no campo. Veja também a página do "livro de receitas" sobre formulários .
Hackish? forma , $ observe o ng-model em seu controlador:
Controlador:
Melhor maneira , use um analisador $ em uma diretiva. Não vou repetir a já boa resposta fornecida por @ pkozlowski.opensource, então aqui está o link: https://stackoverflow.com/a/14425022/215945
Todas as soluções acima envolvem o uso do modelo ng, o que torna
this
desnecessário encontrar .Usar o ng-change causará problemas. Consulte AngularJS - redefinição de $ scope.value não altera o valor no modelo (comportamento aleatório)
fonte
type=number
exibirá automaticamente o botão giratório, o que pode ser indesejável. Você pode ocultar o botão giratório via css, mas, novamente, mesmo isso pode não funcionar em todos os navegadores.Usando
ng-pattern
no campo de texto:Em seguida, inclua isso em seu controlador
fonte
Nenhuma das soluções propostas funcionou bem para mim e, depois de algumas horas, finalmente encontrei o caminho.
Esta é a diretiva angular:
E a entrada ficaria assim:
A expressão regular avalia a tecla pressionada, não o valor .
Também funciona perfeitamente com entradas
type="number"
porque evita a alteração de seu valor, por isso a chave nunca é exibida e não atrapalha o modelo.fonte
restrict-to="[0-9\-]"
Aqui está minha implementação da
$parser
solução que @Mark Rajcok recomenda como o melhor método. É essencialmente o excelente $ parser do @ pkozlowski.opensource para respostas de texto, mas reescrito para permitir apenas números. Todo o crédito vai para ele, isso é apenas para economizar 5 minutos lendo essa resposta e, em seguida, reescrevendo a sua própria:E você o usaria assim:
Curiosamente, os espaços nunca chegam ao analisador, a menos que estejam cercados por um alfanumérico, então você terá que fazê-lo
.trim()
conforme necessário. Além disso, este analisador NÃO funciona<input type="number">
. Por alguma razão, não-numéricos nunca fazê-lo para o analisador, onde eles seriam removidos, mas eles fazem fazê-lo no próprio controle de entrada.fonte
var transformedInput = inputValue ? inputValue.replace(/[^\d.-]/g,'') : null;
ng-trim
comofalse
para garantir que os espaços cheguem ao seu analisador.modelCtrl.$commitViewValue();
entre $ setViewValue (clean); e $ render ();Há algumas maneiras de fazer isto.
Você pode usar
type="number"
:Como alternativa - criei uma diretiva reutilizável para isso que usa uma expressão regular.
Html
Javascript
fonte
Aqui está uma solução muito boa para permitir apenas inserir o número para
input
:fonte
Todas as soluções acima são bastante grandes, eu queria dar meus 2 centavos nisso.
Estou apenas verificando se o valor inserido é um número ou não, e verificando se não está em branco, só isso.
Aqui está o html:
Aqui está o JS:
É bem simples.
Eu acredito que isso não funcionará no Paste tho, apenas para que seja conhecido.
Para Paste, acho que você precisaria usar o evento onChange e analisar a string inteira, outra besta, o tamme. Isso é específico para digitação.
ATUALIZAÇÃO para colar : basta adicionar esta função JS:
E a entrada html adiciona o gatilho:
Espero que isso ajude o /
fonte
Aqui está um Plunker lidando com qualquer situação acima, a proposição não pode ser tratada .
Usando $ formatters e $ parsers pipeline e evitando type = "number"
E aqui está a explicação dos problemas / soluções (também disponíveis no Plunker):
fonte
você pode usar o atributo apenas numérico.
fonte
DECIMAL
DÍGITOS
diretivas angulares para validar números
fonte
Sei que isso é antigo, mas criei uma diretiva para esse fim caso alguém esteja procurando uma solução fácil. Muito simples de usar.
Você pode conferir aqui .
fonte
você também pode querer remover o 0 no início da entrada ... Eu simplesmente adiciono um bloco if à resposta de Mordred acima porque ainda não posso fazer um comentário ...
fonte
Tente isto,
fonte
SOLUÇÃO: Eu faço uma diretiva para todas as entradas, número, texto ou qualquer um, no aplicativo, para que você possa inserir um valor e alterar o evento. Faça para angular 6
HTML
fonte
Acabei criando uma diretiva modificada do código acima para aceitar a entrada e alterar o formato na hora ...
})
fonte
fonte
HTML básico
Bootstrap básico
fonte
<input class="form-control" type="number" >