Publicidade

Lomadee, uma nova espécie na web. A maior plataforma de afiliados da América Latina.

quinta-feira, 3 de janeiro de 2008

Função JavaScript para formatação de números inteiros

Hoje pela manhã pediram-me que alterasse um campo de formulário em um sistema. O usuário queria que, ao digitar um valor inteiro, o campo inserisse automaticamente os separadores de milhar (os pontinhos a cada 3 números... d'oh!).

Já dizia Lavoisier, na Internet nada se cria e nada se perde, tudo se copia. Tá, ele não disse exatamente isso...

Bem, lá fui eu ao Google procurar algo pronto que me ajudasse. Contudo, por incrível que pareça, não consegui encontrar uma função JavaScript que fizesse isso. Não sei se ninguém precisou antes de mim ou se eu é que não consegui encontrar, mas resolvi a situação adaptando uma função para formatação de moeda. Aí está:
//-----------------------------------------------------
//Funcao: formatarNumeroInteiro
//Sinopse: formata o número inteiro digitado, inserindo os separadores de milésimos
//Parametro:
// objTextBox : Objeto (TextBox)
// SeparadorMilesimo : Caracter separador de milésimos
// e : Evento
//Retorno: Booleano
//Autor: Vinícius Aragão Costa - http://vinicosta.blogspot.com
//Baseado na função MascaraMoeda() de Gabriel Fróes - www.codigofonte.com.br
//-----------------------------------------------------
function formatarNumeroInteiro(objTextBox, SeparadorMilesimo, e){
var sep = 0;
var key = '';
var i = j = 0;
var len = len2 = 0;
var strCheck = '0123456789';
var aux = aux2 = '';
var whichCode = (window.Event) ? e.which : e.keyCode;
if (whichCode == 13) return true;
key = String.fromCharCode(whichCode); // Valor para o código da Chave
if (strCheck.indexOf(key) == -1) return false; // Chave inválida
len = objTextBox.value.length;
for(i = 0; i < aux =" '';" len =" aux.length;" len ="=" value =" '';"> 0 && len <= 3) objTextBox.value = aux; if (len > 3) {
aux2 = '';
aux2 += SeparadorMilesimo;
for (j = 0, i = len - 3; i >= 0; i--) {
if (j == 3) {
aux2 += SeparadorMilesimo;
j = 0;
}
aux2 += aux.charAt(i-1);
j++;
}
objTextBox.value = '';
len2 = aux2.length;
for (i = len2 - 1; i >= 0; i--)
objTextBox.value += aux2.charAt(i);
objTextBox.value += aux.substr(len - 3, len);
// Um bug ainda não solucionado insere um . no início do número para valores com mais de 6 dígitos
// Essa pequena gambiarra resolve o problema por enquanto
// Se encontrar a solução, por favor informe ao autor
if(objTextBox.value.charAt(0)==SeparadorMilesimo){
objTextBox.value=objTextBox.value.substr(1,objTextBox.value.length);
}
}
return false;
}
Como fiz correndo, tem uma pequena gambiarra nas últimas linhas que eu pretendo um dia substituir pela solução mais elegante. Mas o importante é que funciona! Use a vontade, peço apenas a gentileza de manter os créditos. Eis um exemplo de uso:
onkeypress="return(formatarNumeroInteiro(this,'.',event))"

_\\//

Nenhum comentário:

Postar um comentário