Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

luan_alves

[Resolvido] mascara de moedas

Recommended Posts

bom dia senhores

estou quebrando a cabeça tentando resolver um problema que é colocar uma mascara de moedas em um campo.

a função que eu estou tentando fazer é a seguinte

function dinheiro (obj)

{

str = obj.value;

contador = str.charAt(str.length-2);

separador =",";

for (i=2;i<str;i++)

{

str+=contador=separador;

}

}

chama-se da seguinte forma

onkeypress(dinheiro(this));

Compartilhar este post


Link para o post
Compartilhar em outros sites

<script language="Javascript">

function BlockKeybord()

{

if((event.keyCode < 48) || (event.keyCode > 57))

{

event.returnValue = false;

}

}

 

function troca(str,strsai,strentra)

{

 

while(str.indexOf(strsai)>-1)

{

str = str.replace(strsai,strentra);

}

return str;

}

 

function FormataMoeda(campo,tammax,teclapres,caracter)

{

var tecla;

if(teclapres == null || teclapres == "undefined")

tecla = -1;

else

tecla = teclapres.keyCode;

 

if(caracter == null || caracter == "undefined")

caracter = ".";

 

vr = campo.value;

 

if(caracter != "")

{

vr = troca(vr,caracter,"");

}

vr = troca(vr,"/","");

vr = troca(vr,",","");

vr = troca(vr,".","");

 

tam = vr.length;

 

if(tecla > 0)

{

if(tam < tammax && tecla != 8)

{

tam = vr.length + 1;

}

if(tecla == 8)

{

tam = tam - 1;

}

}

if(tecla == -1 || tecla == 8 || tecla >= 48 && tecla <= 57 || tecla >= 96 && tecla <= 105)

{

if(tam <= 2)

{

campo.value = vr;

}

if((tam > 2) && (tam <= 5))

{

campo.value = vr.substr(0, tam - 2) + ',' + vr.substr(tam - 2, tam);

}

if((tam >= 6) && (tam <= 8))

{

campo.value = vr.substr(0, tam - 5) + caracter + vr.substr(tam - 5, 3) + ',' + vr.substr(tam - 2, tam);

}

if((tam >= 9) && (tam <= 11))

{

campo.value = vr.substr(0, tam - 8) + caracter + vr.substr(tam - 8, 3) + caracter + vr.substr(tam - 5, 3) + ',' + vr.substr(tam - 2, tam);

}

if((tam >= 12) && (tam <= 14))

{

campo.value = vr.substr(0, tam - 11) + caracter + vr.substr(tam - 11, 3) + caracter + vr.substr(tam - 8, 3) + caracter + vr.substr(tam - 5, 3) + ',' + vr.substr(tam - 2, tam);

}

if((tam >= 15) && (tam <= 17))

{

campo.value = vr.substr(0, tam - 14) + caracter + vr.substr(tam - 14, 3) + caracter + vr.substr(tam - 11, 3) + caracter + vr.substr(tam - 8, 3) + caracter + vr.substr(tam - 5, 3) + ',' + vr.substr(tam - 2, tam);

}

}

}

</script>

 

<input type="text" name="campo" id="campo" maxlength="9" onkeydown="FormataMoeda(this,'9')">

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acabou que eu mesmo consegui descobrir o problema de uma mascara de moedas que é muito conhecida na rede, é só procurar mascara de moedas em js, o problema dela era porque a doctype do html bloqueava tudo nela sendo assim impossivel de escrever qualquer caractere no campo input, então a solução é a troca da doctype comun por esta <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

a função é esta

function formataMoeda(objTextBox, SeparadorMilesimo, SeparadorDecimal, 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 < len; i++)
        if ((objTextBox.value.charAt(i) != '0') && (objTextBox.value.charAt(i) != SeparadorDecimal)) break;
    aux = '';
    for(; i < len; i++)
        if (strCheck.indexOf(objTextBox.value.charAt(i))!=-1) aux += objTextBox.value.charAt(i);
    aux += key;
    len = aux.length;
    if (len == 0) objTextBox.value = '';
    if (len == 1) objTextBox.value = '0'+ SeparadorDecimal + '0' + aux;
    if (len == 2) objTextBox.value = '0'+ SeparadorDecimal + aux;
    if (len > 2) {
        aux2 = '';
        for (j = 0, i = len - 3; i >= 0; i--) {
            if (j == 3) {
                aux2 += SeparadorMilesimo;
                j = 0;
            }
            aux2 += aux.charAt(i);
            j++;
        }
        objTextBox.value = '';
        len2 = aux2.length;
        for (i = len2 - 1; i >= 0; i--)
        objTextBox.value += aux2.charAt(i);
        objTextBox.value += SeparadorDecimal + aux.substr(len - 2, len);
    }
    return false;
}

ela com o onkeypress(this,',','.',event)

Compartilhar este post


Link para o post
Compartilhar em outros sites

cara, se ela não funciona com DOCTYPE, então o código está mal escrito.

sugiro a máscara com Expressão Regular do link que postei, é bem mais crossbrowser, e de acordo com as normas w3c.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.