Pessoal !
Sou iniciante em javascript, mas no encontrei nenhuma funo que funcionasse corretamente.

Ento, dediquei algum tempo e estou publicando essa para quem quiser se beneficiar.
Como j peguei vrias dicas de usurios, acredito que a minha ajuda ir ser de grande serventia a todos.

O que eu fiz :

1) Melhorei a rotina, permitindo que voc determine at 12 casas decimais (acho que no vai precisar tanto).
2) O limite de valores ficou bem alto. Para 2 decimais o campo ficou "12.345.678.901.234.567.890.123.456,78"
3) Voc pode definir o tamanho mximo do campo.
4) Voc pode definir os caracteres de milhar e decimal (pode inverter se quiser).


OBRIGADO A TODOS QUE DE UMA FORMA OU OUTRA PUBLICAM DICAS !


A rotina completa ficou assim :




<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

<head>
<title>Formatacao de Valores Monetarios</title>
</head>

<body>
<script>
// retira caracteres invalidos da string
function LimpaValor(valor, validos, tammax) {
var result = "";
var aux;
for (var i=0; i < valor.length; i++) {
	aux = validos.indexOf(valor.substring(i, i+1));
	if (aux>=0) {
		if ( result.length < tammax - 1 ) {
			result += aux;
		}
	}
}
return result;
}


function FormataValor(campo,tammax,teclapres,decimal,ptmilhar,ptdecimal) {
var tecla = teclapres.keyCode;
	vr = LimpaValor(campo.value,"0123456789",tammax);
	tam = vr.length;
	dec = decimal;
	if (tam < tammax && tecla != 8){ tam = vr.length + 1 ; }
	if (tecla == 8 ) { tam = tam - 1 ; }
	if ( tecla == 8 || tecla >= 48 && tecla <= 57 || tecla >= 96 && tecla <= 105 ) {
		if ( tam <= dec ) { campo.value = vr ; }
		else if ( (tam > dec) && (tam <= dec + 3) ){
			//alert(tam);
			campo.value = vr.substr( 0, tam - dec ) + ptdecimal + vr.substr( tam - dec, tam ) ; 
		} else if  ( (tam >= dec + 4) && (tam <= dec + 6) ){
			campo.value = vr.substr( 0, tam - 3 - dec ) + ptmilhar + vr.substr( tam - 3 - dec , 3 ) + ptdecimal + vr.substr( tam - dec , 12 ) ; 
		} else if  ( (tam >= dec + 7) && (tam <= dec + 9) ){
			campo.value = vr.substr( 0, tam - 6 - dec ) + ptmilhar + vr.substr( tam - 6 - dec , 3 ) + ptmilhar + vr.substr( tam - 3 - dec , 3 ) + ptdecimal + vr.substr( tam - dec , 12 ) ; 
		} else if  ( (tam >= dec + 10) && (tam <= dec + 12) ){
			campo.value = vr.substr( 0, tam - 9 - dec ) + ptmilhar + vr.substr( tam - 9 - dec , 3 ) + ptmilhar + vr.substr( tam - 6 - dec , 3 ) + ptmilhar + vr.substr( tam - 3 - dec , 3 ) + ptdecimal + vr.substr( tam - dec , 12 ) ; 
		} else if  ( (tam >= dec + 13) && (tam <= dec + 15) ){
			campo.value = vr.substr( 0, tam - 12 - dec ) + ptmilhar + vr.substr( tam - 12 - dec , 3 ) + ptmilhar + vr.substr( tam - 9 - dec , 3 ) + ptmilhar + vr.substr( tam - 6 - dec , 3 ) + ptmilhar + vr.substr( tam - 3 - dec , 3 ) + ptdecimal + vr.substr( tam - dec , 12 ) ; 
		} else if  ( (tam >= dec + 16) && (tam <= dec + 18) ){
			campo.value = vr.substr( 0, tam - 15 - dec ) + ptmilhar + vr.substr( tam - 15 - dec , 3 ) + ptmilhar + vr.substr( tam - 12 - dec , 3 ) + ptmilhar + vr.substr( tam - 9 - dec , 3 ) + ptmilhar + vr.substr( tam - 6 - dec , 3 ) + ptmilhar + vr.substr( tam - 3 - dec , 3 ) + ptdecimal + vr.substr( tam - dec , 12 ) ; 
		} else if  ( (tam >= dec + 19) && (tam <= dec + 21) ){
			campo.value = vr.substr( 0, tam - 18 - dec ) + ptmilhar + vr.substr( tam - 18 - dec , 3 ) + ptmilhar + vr.substr( tam - 15 - dec , 3 ) + ptmilhar + vr.substr( tam - 12 - dec , 3 ) + ptmilhar + vr.substr( tam - 9 - dec , 3 ) + ptmilhar + vr.substr( tam - 6 - dec , 3 ) + ptmilhar + vr.substr( tam - 3 - dec , 3 ) + ptdecimal + vr.substr( tam - dec , 12 ) ; 
		} else if  ( (tam >= dec + 22) && (tam <= dec + 24) ){
			campo.value = vr.substr( 0, tam - 21 - dec ) + ptmilhar + vr.substr( tam - 21 - dec , 3 ) + ptmilhar + vr.substr( tam - 18 - dec , 3 ) + ptmilhar + vr.substr( tam - 15 - dec , 3 ) + ptmilhar + vr.substr( tam - 12 - dec , 3 ) + ptmilhar + vr.substr( tam - 9 - dec , 3 ) + ptmilhar + vr.substr( tam - 6 - dec , 3 ) + ptmilhar + vr.substr( tam - 3 - dec , 3 ) + ptdecimal + vr.substr( tam - dec , 12 ) ; 
		} else {
			campo.value = vr.substr( 0, tam - 24 - dec ) + ptmilhar + vr.substr( tam - 24 - dec , 3 ) + ptmilhar + vr.substr( tam - 21 - dec , 3 ) + ptmilhar + vr.substr( tam - 18 - dec , 3 ) + ptmilhar + vr.substr( tam - 15 - dec , 3 ) + ptmilhar + vr.substr( tam - 12 - dec , 3 ) + ptmilhar + vr.substr( tam - 9 - dec , 3 ) + ptmilhar + vr.substr( tam - 6 - dec , 3 ) + ptmilhar + vr.substr( tam - 3 - dec , 3 ) + ptdecimal + vr.substr( tam - dec , 12 ) ; 
		}
	}
}

</script>
<input type="text" name="T1" size="40" onkeydown="FormataValor(this,28,event,2,'.',',');" />
<br /><br />
<input type="text" name="T2" size="40" onkeydown="FormataValor(this,28,event,3,',','.')" />
<br /><br />
<input type="text" name="T4" size="40" onkeydown="FormataValor(this,28,event,4,'.',',')" />
<br /><br />
<input type="text" name="T5" size="40" onkeydown="FormataValor(this,28,event,5,'.',',')" />
<br /><br />
<input type="text" name="T6" size="40" onkeydown="FormataValor(this,28,event,6,'.',',')" />
<br /><br />
<input type="text" name="T7" size="40" onkeydown="FormataValor(this,28,event,7,'.',',')" />
<br /><br />
<input type="text" name="T8" size="40" onkeydown="FormataValor(this,28,event,8,'.',',')" />
<br /><br />
<input type="text" name="T9" size="40" onkeydown="FormataValor(this,28,event,12,'.',',')" />
</p>
</p>
</body>

</html> 







Guys!
 I'm a beginner in javascript, but have not found any function that works correctly.

 So, I spent some time and I'm posting this for those who want to benefit.
 As I picked up several tips from users, I believe that my help will be of great service to all.

 What I did:

 1) I improved the routine, allowing you to determine up to 12 decimal places (I think it will not need much).
 2) The range of values ??was very high. For the second decimal field was "12.345.678.901.234.567.890.123.456,78"
 3) You can set the maximum field size.
 4) You can set the thousands and decimal characters (you can reverse if you want).

 THANKS TO ALL THAT IN A WAY OR ANOTHER Publicity Tips!

 The whole routine is attached!
