campo númerico

flapyTeam
21 de Enero del 2005
Hola a todos me gustaría saber como se haría una función que en Javascript dado un campo de texto númerico lo formate de manera que quede estilo monetario es decir si introduzco 1000 que me lo formatee a 1.000 si son 10000 a 10.000 y así sucesivamente sin decimales gracias


Jorge
21 de Enero del 2005
Toma el valor del campo y ve recorriendolo como si fuese un array de fin a principio, volcando su contenido en otra variable, cada tres posiciones añade un punto.
Finalmente asigna el la variable al valor del campo.

flapyTeam
21 de Enero del 2005
Hola ya he conseguido sacar una función más o menos decente que además de poner los puntos para cuando entramos campos monetarios en caso de borrar te reorganiza los puntos.

Sería con un onkeydown u onkeyup ya que el onkeypress no detecta que se presiona el borrar.

/*
* Función javascript que dado un objeto, un evento y el número máximo de
* números que puede tener ese objeto nos devuelve el objeto formateado
*
* Ejemplo:
* object->1000 devolvera entonces 1.000
*
*/
function ponerpuntos(object,e,longitud)
{
var key = '';
var inicio = 0;
var i = j = 0;
var len = 0;
var strCheck = '0123456789'; //Array donde miraremos si se presiono un número o no.
var aux = aux2 = '';

//Según la tecla presionada se le da un valor u otro, esto es debido a que
// el onkeydown el pad númerico lo coge como letras y no como números y
// debemos traducirlas.
switch (e.keyCode)
{
case 48:
case 96: key='0';
break
case 49:
case 97: key='1';
break
case 50:
case 98: key='2';
break
case 51:
case 99: key='3';
break
case 52:
case 100: key='4';
break
case 53:
case 101: key='5';
break
case 54:
case 102: key='6';
break
case 55:
case 103: key='7';
break
case 56:
case 104: key='8';
break
case 57:
case 105: key='9';
break
//Caso de que pulsemos el borrar se borra el último elemento
case 8: key='`';
break
//Si no es ninguno de los anteriores es una tecla no valida.
default: return false;
break
}

//Obtenemos la longitud del objeto.
len = object.value.length;

//En caso de que el usuario introduzca como primer elemento el 0 y
//luego introduzca otro elemento se sobreescribe el 0.
for(i = 0; i < len; i++)
if ((object.value.charAt(i) != '0'))
break;

//Eliminamos todos los puntos que hay en el objeto para insertarselos
//de nuevo ya que cambia de longitud y por tanto de posición.
aux = '';
for(; i < len; i++)
if (strCheck.indexOf(object.value.charAt(i))!=-1)
aux += object.value.charAt(i);

// Insertamos el núevo elemento, en caso de que no hayamos presionado
// el borrar
if(key!='`')
{
aux += key;
}
// En caso contrario eliminamos el último elemento.
else
{
aux = aux.substring(0,aux.length-1);
}

len = aux.length;

//Comprobamos que la longitud de todos los números juntos no supera
//la configurada en el campo, ya que sino seguiria insertando y se
//nos iria de rango a la hora de insertar en la base de datos.
if(len <= longitud)
{
// Si longitud del objeto es de 1 a 3 lo dejo tal y como estaba
// y si es 0 devuelvo la cadena vacia.
if (len == 0) object.value = '';
if (len == 1) object.value = aux;
if (len == 2) object.value = aux;
if (len == 3) object.value = aux;

//Si longitud mayor a 3 le tengo que añadir los puntos.
if (len > 3)
{
aux2 = ''
//Divido la longitud total entre 3
var resto = len%3;
switch (resto)
{
case 0: inicio = 0;
break;
case 1: aux2 += aux.charAt(0);
aux2 += '.';
inicio = 1;
break
case 2: aux2 += aux.charAt(0);
aux2 += aux.charAt(1);
aux2 += '.';
inicio = 2;
break;
}

//Según el valor de inicio empezare a insertar antes o después
for(i=0,j=inicio;j<len;j++)
{
//Cada tres elementos inserto un .
if(i==3)
{
aux2+='.';
i = 0;
}
aux2 +=aux.charAt(j);
i++
}
object.value = aux2;
}
}
return false;
}