Foros del Web » Programando para Internet » Javascript »

Problema con función para validar sólo números con 1 punto

Estas en el tema de Problema con función para validar sólo números con 1 punto en el foro de Javascript en Foros del Web. Buenas noches: En un campo de formulario sólo deben ingresarse cifras de porcentaje y para eso sólo se deben permitir números y un solo punto ...
  #1 (permalink)  
Antiguo 03/05/2012, 19:27
Avatar de freesoftwarrior  
Fecha de Ingreso: marzo-2006
Mensajes: 362
Antigüedad: 18 años, 1 mes
Puntos: 10
Problema con función para validar sólo números con 1 punto

Buenas noches:
En un campo de formulario sólo deben ingresarse cifras de porcentaje y para eso sólo se deben permitir números y un solo punto (obvio).

Tengo esta función

Cita:
var nav4 = window.Event ? true : false;
function acceptNum2a(evt, dato, campo)
{
// Punto = 46
// Backspace = 8, Enter = 13, '0' = 48, '9' = 57
var key = nav4 ? evt.which : evt.keyCode;
if((dato.split(".").length-1) > 1)
{
alert("No puedes ingresar más de un punto (.) en la cifra.");
valor=dato.length;
cifra=dato.slice(0,valor-1);
document.getElementById(campo).value=cifra;
return;
}
else
{return (key <= 13 || (key >= 48 && key <= 57) || key == 46);}
}
El problema es que, aunque me valida correctamente el que se ingrese sólo un punto, luego del alert termina publicando la cifra correcta MÁS el último carácter ingresado

Por ejemplo si ingreso

12.12.5

me aparece el alert y al hacer clic en aceptar queda

12.125


Igual si ingreso

12.12..

me muestra

12.12.

Es decir siempre incluye el último carácter pulsado.
¿Cómo puedo solucionar este inconveniente?.

Una consulta adicional..... ¿hay alguna forma de que se pueda "capturar" el id del campo de formulario desde el cual se está invocando la función?. Consulto esto porque de momento le esto pasando el ID del campo en la función misma, pero pese a haber buscado, no he encontrado una forma (o función) que me permita saber cual es el ID del campo de formulario.

Yo llamo a esta función así:

Cita:
<input type="text" id="porcentaje" onKeyPress="return acceptNum2a(event, this.value,'porcentaje');">

Muchas gracias por el apoyo
Un saludo desde Lima, Perú

P.D.
Me olvidaba.... en el return de la función probé con estas opciones

return null;
return cifra;
return (cifra);

y nada
  #2 (permalink)  
Antiguo 03/05/2012, 21:30
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 16 años, 9 meses
Puntos: 1567
Respuesta: Problema con función para validar sólo números con 1 punto

Si en definitiva vas a trabajar con números (flotantes o enteros para el caso de que la cifra sea un numero redondo, mejor validar con esto

Código HTML:
Ver original
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  2. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  3. <html xmlns="http://www.w3.org/1999/xhtml">
  4. <title>titulo</title>
  5. <meta http-equiv="content-type" content="text/html; charset=utf-8" />
  6.  
  7. <script type="text/javascript">
  8. //<![CDATA[
  9. function esFloat (n) {
  10. return n===+n && n!==(n|0);
  11. }
  12.  
  13. function esEntero (n) {
  14. return n===+n && n===(n|0);
  15. }
  16.  
  17. var v = 8;
  18. if(esFloat(v)){
  19. alert(v + ' es float');
  20. }else{
  21. alert(v + ' no es float');
  22. }
  23.  
  24. v = 7;
  25. if(esEntero(v)){
  26. alert(v + ' es entero');
  27. }else{
  28. alert(v + ' no es entero')
  29. }
  30. //]]>
  31. </head>
  32.  
  33. </body>
  34. </html>

saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #3 (permalink)  
Antiguo 03/05/2012, 22:11
Avatar de freesoftwarrior  
Fecha de Ingreso: marzo-2006
Mensajes: 362
Antigüedad: 18 años, 1 mes
Puntos: 10
Respuesta: Problema con función para validar sólo números con 1 punto

Gracias por tu respuesta pero no logro comprender como podría utilizar el código que me sugieres. Yo no deseo validar un número sino que sólo se pueda ingresar números y un sólo punto, nada más.

Mil gracias por tu interés y apoyo.
Un saludo desde el Perú
  #4 (permalink)  
Antiguo 03/05/2012, 22:28
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 16 años, 9 meses
Puntos: 1567
Respuesta: Problema con función para validar sólo números con 1 punto

las funciones que te indique solo van a aceptar
2
5
6.8
7.54
cualquier otra cosa no va a ser válida, ahora que si son cadenas y solo te interesa saber si es un formato de numero válido podés usar
Código HTML:
Ver original
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  2. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  3. <html xmlns="http://www.w3.org/1999/xhtml">
  4. <title>titulo</title>
  5. <meta http-equiv="content-type" content="text/html; charset=utf-8" />
  6.  
  7. <script type="text/javascript">
  8. //<![CDATA[
  9. function  numeroValido(valor) {
  10. var objRegExp  =  /(^-?\d\d*\.\d*$)|(^-?\d\d*$)|(^-?\.\d\d*$)/;
  11. return objRegExp.test(valor);
  12. }
  13. if(numeroValido('9')){
  14. alert('ok');
  15. }
  16. //]]>
  17. </head>
  18.  
  19. </body>
  20. </html>

si yo usase x.xx.xxx no seria valido, con vengamos que no estamos hablando de formatear numeros para hacerlos presentables en la pantalla, se entiende que cien mil, es 100000 y no 100.000 y que un millón es 1000000 y no 1.000.000, que contiene 2 puntos en su formato


Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.

Etiquetas: formulario, input, punto
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 03:32.