¿Cuál es la mejor manera de restringir la entrada de "número" solo para cuadros de texto?
Estoy buscando algo que permita puntos decimales.
Veo muchos ejemplos. Pero todavía tengo que decidir cuál usar.
Actualización de Praveen Jeganathan
No más complementos, jQuery ha implementado su propio jQuery.isNumeric()
agregado en v1.7. Ver: https://stackoverflow.com/a/20186188/66767
jquery
validation
isnumeric
Wenbert
fuente
fuente
Respuestas:
Actualizar
Hay una solución nueva y muy simple para esto:
Vea esta respuesta o pruébela usted mismo en JSFiddle .
Complemento jquery.numeric
He implementado con éxito muchos formularios con el complemento jquery.numeric .
Además, esto también funciona con áreas de texto.
Sin embargo, tenga en cuenta que Ctrl + A, Copiar + Pegar (a través del menú contextual) y Arrastrar + Soltar no funcionarán como se esperaba.
HTML 5
Con un soporte más amplio para el estándar HTML 5, podemos usar
pattern
atributos ynumber
tipos parainput
elementos para restringir la entrada de solo números. En algunos navegadores (especialmente Google Chrome), también funciona para restringir el pegado de contenido no numérico. Más información sobrenumber
y otros tipos de entrada más nuevos está disponible aquí .fuente
allowDecimal
opción para cada vez que solo quiero permitir valores enteros ... la fuente es muy simple y está bien escrita.type="number"
.Si desea restringir la entrada (a diferencia de la validación), podría trabajar con los eventos clave. algo como esto:
Y:
Esto inmediatamente le permite al usuario saber que no puede ingresar caracteres alfabéticos, etc., en lugar de hacerlo más tarde durante la fase de validación.
Todavía querrá validar porque la entrada puede completarse cortando y pegando con el mouse o posiblemente con un autocompletador de formularios que puede no activar los eventos clave.
fuente
$doc.on('keyup blur input propertychange', 'input[name="price"]', function(){$(this).val($(this).val().replace(/[^0-9\.]/g,''));});
Pensé que la mejor respuesta era la de arriba para hacer esto.
pero estoy de acuerdo en que es un poco doloroso que las teclas de flecha y el botón de borrar coloquen el cursor al final de la cadena (y por eso me lo devolvieron en las pruebas)
Agregué en un cambio simple
de esta manera, si se presiona cualquier botón que no va a cambiar el texto, simplemente ignórelo. Con esto, puede presionar flechas y eliminar sin saltar al final, pero borra cualquier texto no numérico.
fuente
keypress
podría ser utilizado para simplificar aún más esto, porque al parecerkeyup
ykeydown
gatillo en cualquier tecla del teclado, mientras quekeypress
sólo los disparadores en las teclas de "carácter" (por lo tanto no se dispara en la flecha y las teclas de borrado). Consulte esta respuesta como referencia: stackoverflow.com/a/1367720/1298685El complemento jquery.numeric tiene algunos errores que notifiqué al autor. Permite múltiples puntos decimales en Safari y Opera, y no puede escribir retroceso, teclas de flecha u otros caracteres de control en Opera. Necesitaba una entrada entera positiva, así que terminé escribiendo la mía al final.
fuente
No más complementos, jQuery ha implementado su propio jQuery.isNumeric () agregado en v1.7.
Resultados de muestras
Aquí hay un ejemplo de cómo vincular isNumeric () con el detector de eventos
fuente
var v = this.value;
cambiarlo avar v = this.value.replace(/,/g,'');
. Números como los que21,345,67.800
también se consideran.$(document).on('keyup keypress', '#somethingSomething', function(){ var aValue = $(this).val(); if($.isNumeric(aValue) === false){ $(this).val(aValue.slice(0,-1)); } });
El complemento numeric () mencionado anteriormente no funciona en Opera (no puede retroceder, eliminar o incluso usar las teclas de retroceso o avance).
El siguiente código en JQuery o Javascript funcionará perfectamente (y solo son dos líneas).
JQuery:
Javascript:
Por supuesto, esto es solo para la entrada numérica pura (más teclas de retroceso, eliminación, avance / retroceso), pero se puede cambiar fácilmente para incluir puntos y caracteres menos.
fuente
Puede usar el complemento Validación con su método number () .
fuente
Enfoque Javascript
Enfoque jQuery
ACTUALIZAR
Las respuestas anteriores son para el caso de uso más común: validar la entrada como un número.
fuente
A continuación se muestra lo que utilizo para bloquear literalmente las pulsaciones de teclas. Esto solo permite números 0-9 y un punto decimal. Fácil de implementar, no tiene mucho código y funciona de maravilla:
fuente
charCode != 46
de la declaración if. ¡Gran respuesta!Como una ligera mejora a esta sugerencia , puede usar el complemento de Validación con su número () , dígitos y métodos de rango . Por ejemplo, lo siguiente garantiza que obtenga un número entero positivo entre 0 y 50:
fuente
No ves alfabetos apariencia mágica y desaparición en la tecla hacia abajo. Esto también funciona en la pasta del mouse.
fuente
/[^0-9.]/g
Primero intenté resolver esto usando jQuery, pero no estaba contento con los caracteres no deseados (sin dígitos) que realmente aparecían en el campo de entrada justo antes de ser eliminados en el keyup.
Buscando otras soluciones encontré esto:
Enteros (no negativos)
Fuente: https://developer.mozilla.org/en-US/docs/Web/API/GlobalEventHandlers.onkeypress#Example Ejemplo en vivo: http://jsfiddle.net/u8sZq/
Puntos decimales (no negativos)
Para permitir un solo punto decimal, puede hacer algo como esto:
Fuente: Acabo de escribir esto. Parece estar funcionando. Ejemplo en vivo: http://jsfiddle.net/tjBsF/
Otras personalizaciones
Algunas cosas que te pueden interesar:
Deficiencias
Sé que el título pide soluciones jQuery, pero espero que a alguien le resulte útil de todos modos.
fuente
Gracias por el post Dave Aaron Smith
Edité su respuesta para aceptar el punto decimal y los números de la sección de números. Este trabajo es perfecto para mi.
fuente
Y aplique esto en todas las entradas que desee:
fuente
HTML5 admite el número de tipo de entrada con soporte de navegador global 88% + según CanIUse a partir de octubre de 2015.
Esta no es una solución relacionada con JQuery, pero la ventaja es que en los teléfonos móviles el teclado de Android estará optimizado para ingresar números.
Alternativamente, es posible usar texto de tipo de entrada con el nuevo parámetro "patrón". Más detalles en la especificación HTML5.
Creo que es mejor que la solución jquery, ya que en esta pregunta la solución jquery proporcionada no admite miles de separadores. Si puedes usar html5.
JSFiddle: https://jsfiddle.net/p1ue8qxj/
fuente
Esta función hace lo mismo, usa algunas de las ideas anteriores.
fuente
/ * esta es mi versión de navegador cruzado de ¿Cómo permitir solo números (0-9) en el cuadro de entrada HTML usando jQuery?
* /
fuente
Simplemente ejecute el contenido a través de parseFloat (). Volverá
NaN
con una entrada no válida.fuente
Puede usar autoNumeric desde decorplanit.com . Tienen un buen soporte para numérico, así como moneda, redondeo, etc.
Lo he usado en un entorno IE6, con pocos ajustes de CSS, y fue un éxito razonable.
Por ejemplo, se
numericInput
podría definir una clase css y se podría usar para decorar sus campos con las máscaras de entrada numérica.adaptado del sitio web autoNumeric:
fuente
Creo que esta es una buena manera de resolver este problema y es extremadamente simple:
Ejemplo: JSFiddle
Escenarios cubiertos
La mayoría de las recomendaciones similares aquí fallan al menos una de estas o requieren mucho código para cubrir todos estos escenarios.
home
,end
y lasarrow
llaves.delete
ybackspace
para ser utilizado en cualquier índice.keyup
evento no se usa.Escenarios fallidos
0.5
y eliminar solo el cero no funcionará. Esto se puede solucionar cambiando la expresión regular a/^[0-9]*\.?[0-9]*$/
y luego agregando un evento de desenfoque para anteponer un0
cuando el cuadro de texto comienza con un punto decimal (si lo desea). Vea este escenario avanzado para una mejor idea de cómo solucionar esto.Enchufar
Creé este simple complemento jquery para hacer esto más fácil:
fuente
La mejor manera es verificar los contenidos del cuadro de texto cada vez que pierde el foco.
Puede verificar si el contenido es un "número" utilizando una expresión regular.
O puede usar el complemento de Validación, que básicamente hace esto automáticamente.
fuente
Verifique este código de búsqueda para el uso de la base de datos:
fuente
Este es un fragmento que acabo de hacer (usando una parte del código de Peter Mortensen / Keith Bentrup) para una validación de porcentaje entero en un campo de texto (se requiere jQuery):
Este código:
Espero que esto ayude a los necesitados.
fuente
Encontré una gran solución aquí http://ajax911.com/numbers-numeric-field-jquery/
Acabo de cambiar el "keyup" a "keydown" según mi requisito
fuente
Si está utilizando HTML5, no necesita hacer grandes esfuerzos para realizar la validación. Solo usa -
El atributo de paso permite que el punto decimal sea válido.
fuente
Otra forma de mantener la posición de intercalación en la entrada:
Ventajas:
Plunker: Demo trabajando
fuente
Acabo de encontrar un complemento aún mejor. Te da mucho más control. Supongamos que tiene un campo DOB donde necesita que sea numérico pero también acepta caracteres "/" o "-".
¡Funciona muy bien!
Compruébelo en http://itgroup.com.ph/alphanumeric/ .
fuente
Este código funcionó bastante bien en mí, solo tuve que agregar los 46 en la matriz controlKeys para usar el período, aunque no creo que sea la mejor manera de hacerlo;)
fuente
Usé esto, con buenos resultados ...
fuente
Esto es muy simple porque ya tenemos una función incorporada de JavaScript "isNaN".
fuente