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á:
//-----------------------------------------------------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:
//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;
}
onkeypress="return(formatarNumeroInteiro(this,'.',event))"
_\\//
Nenhum comentário:
Postar um comentário