Estoy usando ngChange en AngularJS para activar una función personalizada que eliminará cualquier letra que el usuario agregue a la entrada.
<input type="text" name="inputName" data-ng-change="numbersOnly()"/>
El problema es que necesito apuntar a la entrada que activó numbersOnly()
para poder eliminar las letras ingresadas. He buscado mucho en Google y no pude encontrar nada al respecto.
¿Que puedo hacer?
javascript
angularjs
angularjs-directive
Chris Bier
fuente
fuente
Respuestas:
De manera fácil , use type = "number" si funciona para su caso de uso:
Otra forma fácil: ng-pattern también se puede usar para definir una expresión regular que limitará lo que está permitido en el campo. Consulte también la página del "libro de recetas" sobre formularios .
¿Hackish? way , $ mire el modelo ng en su controlador:
Controlador:
La mejor manera es usar un $ parser en una directiva. No voy a repetir la ya buena respuesta proporcionada por @ pkozlowski.opensource, así que aquí está el enlace: https://stackoverflow.com/a/14425022/215945
Todas las soluciones anteriores implican el uso de ng-model, lo que hace que no sea
this
necesario buscar .El uso de ng-change causará problemas. Vea AngularJS: el restablecimiento de $ scope.value no cambia el valor en la plantilla (comportamiento aleatorio)
fuente
type=number
se mostrará automáticamente la ruleta que puede ser indeseable. Puede ocultar la ruleta a través de css pero, de nuevo, incluso eso puede no funcionar en todos los navegadores.Usando
ng-pattern
en el campo de texto:Luego incluye esto en tu controlador
fuente
Ninguna de las soluciones propuestas funcionó bien para mí, y después de un par de horas finalmente encontré el camino.
Esta es la directiva angular:
Y la entrada se vería así:
La expresión regular evalúa la tecla presionada, no el valor .
También funciona perfectamente con entradas
type="number"
porque evita que cambie su valor, por lo que la clave nunca se muestra y no ensucia el modelo.fuente
restrict-to="[0-9\-]"
Aquí está mi implementación de la
$parser
solución que @Mark Rajcok recomienda como el mejor método. Es esencialmente el excelente analizador de $ de @ pkozlowski.opensource para la respuesta de texto, pero reescrito para permitir solo números. Todo el crédito es para él, esto es solo para ahorrarle los 5 minutos de leer esa respuesta y luego reescribir la suya:Y lo usarías así:
Curiosamente, los espacios nunca llegan al analizador a menos que estén rodeados por un alfanumérico, por lo que tendrá que hacerlo
.trim()
según sea necesario. Además, este analizador NO funciona<input type="number">
. Por alguna razón, los no numéricos nunca llegan al analizador donde se eliminarían, pero sí lo hacen en el control de entrada.fuente
var transformedInput = inputValue ? inputValue.replace(/[^\d.-]/g,'') : null;
ng-trim
parafalse
asegurarse de que los espacios lleguen a su analizador.modelCtrl.$commitViewValue();
entre $ setViewValue (clean); y $ render ();Hay varias formas de hacer esto.
Podrías usar
type="number"
:Alternativamente, creé una directiva reutilizable para esto que usa una expresión regular.
HTML
Javascript
fuente
Aquí hay una solución bastante buena para que solo permita ingresar un número al
input
:fuente
Todas las soluciones anteriores son bastante grandes, quería dar mis 2 centavos en esto.
Solo estoy verificando si el valor ingresado es un número o no, y si no está en blanco, eso es todo.
Aquí está el html:
Aquí está el JS:
Es muy sencillo.
Creo que esto no funcionará en Paste, solo para que se sepa.
Para Pegar, creo que necesitaría usar el evento onChange y analizar toda la cadena, otra bestia muy distinta a la del tamme. Esto es específico para escribir.
ACTUALIZAR para Pegar : solo agregue esta función JS:
Y la entrada html agrega el disparador:
Espero que esto te ayude
fuente
Aquí hay un Plunker que maneja cualquier situación anterior a la propuesta que no maneja.
Utilizando $ formateadores y $ parsers pipeline y evitando type = "number"
Y aquí está la explicación de problemas / soluciones (también disponible en Plunker):
fuente
puede utilizar un atributo solo numérico.
fuente
DECIMAL
DIGITOS
directivas angulares para validar números
fuente
Sé que esto es antiguo, pero he creado una directiva para este propósito en caso de que alguien esté buscando una solución fácil. Muy simple de usar.
Puedes comprobarlo aquí .
fuente
es posible que también desee eliminar el 0 al comienzo de la entrada ... Simplemente agrego un bloque if a la respuesta de Mordred anterior porque todavía no puedo hacer un comentario ...
fuente
Prueba esto,
fuente
SOLUCIÓN: hago una directiva para todas las entradas, número, texto o cualquiera, en la aplicación, para que pueda ingresar un valor y cambiar el evento. Hacer para angular 6
HTML
fuente
Terminé creando una directiva modificada del código anterior para aceptar la entrada y cambiar el formato sobre la marcha ...
})
fuente
fuente
HTML básico
Bootstrap básico
fuente
<input class="form-control" type="number" >