Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Pessoal, peguei uma função que ja estava em um sistema que herdei mas que não era muito dinâmica.
Já vi umas semelhantes mas nenhuma me agradava completamente. Editei e to postando o resultado
function Formata_reais(campo,tammax,teclapres,decimal) {
var tecla = teclapres.keyCode;
vr = Limpar(campo.value,"0123456789");
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 ){
fill = (dec - 1);
i = "";
while (fill > 0){
i += "0";
fill--;
}
campo.value = "0," + i + vr ;//0,001-1
}
if ( (tam > dec) && (tam <= (dec + 3)) ){//1,123 - 123,456
if (vr.substr( 0, tam - dec )== "00" || vr.substr( 0, tam - dec )=="000"){
campo.value = "0," + vr.substr( tam - dec, tam ) ;
} else if (vr.substr( 0, 1)==0) { //0,12345
campo.value = vr.substr( 1, tam - (dec+1) ) + "," + vr.substr( tam - dec, tam ) ;
} else {
campo.value = vr.substr( 0, tam - dec ) + "," + vr.substr( tam - dec, tam ) ;
}
}
if ( (tam >= (dec + 4)) && (tam <= (dec + 6) ) ){//3.456,789 - 123.456,789
campo.value = vr.substr( 0, tam - (dec + 3) ) + "." + vr.substr( tam - (dec + 3), 3 ) + "," + vr.substr( tam - dec, tam ) ;
}
if ( (tam >= (dec + 7)) && (tam <= (dec + 9)) ){//1.234.567,891 - 123.456.789,123
campo.value = vr.substr( 0, tam - (dec + 6) ) + "." + vr.substr( tam - (dec + 6), 3 ) + "." + vr.substr( tam - (dec + 3), 3 ) + "," + vr.substr( tam - dec, tam ) ;
}
if ( (tam >= (dec + 10)) && (tam <= (dec + 12)) ){//0.123.456.789,123 - 000.123.456.789,123
campo.value = vr.substr( 0, tam - (dec + 9) ) + "." + vr.substr(tam - (dec + 9), 3 ) + "." + vr.substr( tam - (dec + 6), 3 ) + "." + vr.substr( tam - (dec + 3), 3 ) + "," + vr.substr( tam - dec, tam ) ;
}
if ( (tam >= (dec + 13)) && (tam <= (dec + 15)) ){
campo.value = vr.substr(0, tam - (dec + 12)) + "." + vr.substr(tam - (dec + 12) , 3 ) + "." + vr.substr(tam - (dec + 9), 3 ) + "." + vr.substr( tam - (dec + 6), 3 ) + "." + vr.substr( tam - (dec + 3), 3 ) + "," + vr.substr( tam - dec, tam ) ;
}
}
}
Todo if segue uma mesma lógica ( os dois primeiros tem um tratamento diferenciado ), então se alguém achar útil automatizar dentro de um loop isso sinta-se a vontade.Não sei de quem é o crédito da função original.
Ta formatando até yyy.xxx.yyy.xxx,yyy
A função Limpar vai limpando as entradas de acordo com os caracteres permitidos.
Sou inexperiente com javascript, então sintam-se a vontade pra me chamar a atenção sobre erros e problemas de performance.
function Limpar(valor, validos)
{
// retira caracteres invalidos da string
var result = "";
var aux;
for (var i=0; i < valor.length; i++)
{
aux = validos.indexOf(valor.substring(i, i+1));
if (aux>=0)
{
result += aux;
}
}
return result;
}
A chamada fica assim.
<input name='valor' type='text' size='20' maxlength='19' onkeydown="Formata_reais(this,20,event,4)">
onde 4 é o número de casas depois da vírgula
Carregando comentários...