Ver Mensaje Individual
  #1 (permalink)  
Antiguo 03/05/2012, 19:27
Avatar de freesoftwarrior
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