Ir para conteúdo

POWERED BY:

Arquivado

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

marcosfj1

[Resolvido] Mascara para formatar moeda nao funciona

Recommended Posts

Ai galera preciso formatar um campo, e quero usar javascript, pesquisando achei diversos codigos, mas o q mais vi na net é o q estou tentando fazer funcionar, mas mesmo assim nao esta indo, nao sei praticamente nada de javascript por isso queria saber de vcs se tem algum problema com este codigo, se estou implementando ele errado.....e tbm se sujerem alguma outra maneira de fazer este campo formatar para moeda

 

Codigo JS:

<head>


<script type="text/javascript">  
function MascaraMoeda(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; 
   }



</script>  


</head> 

 

COMO EU CHAMO:

<td align="Left"><input onkeypress="return(MascaraMoeda(this,'','.',event))" name="pesquisa_valor" size="10" id="pesquisa_valor" type="text" value="<?=$_POST['pesquisa_valor'] ?>" /></td>

 

Alguem sabe me ajudar?

 

valeu

Compartilhar este post


Link para o post
Compartilhar em outros sites

use a mascara mvalor

 

http://www.wbruno.com.br/blog/2011/03/12/diversas-mascaras-com-er/

 

forma de usar:

 Real: <input type="text" name="valor" onkeypress="mascara( this, mvalor );" maxlength="14" />  

Compartilhar este post


Link para o post
Compartilhar em outros sites

Valeu vou tentar aqui pra ver se dá certo e já falo o resultado

 

===============================================================

 

Hum aqui nao deu certo nao....acho q ta certo como eu fiz, mas mesmo assim ao inserir os numeros no campos nao esta aparecendo

 

JS:

<script> 
function mvalor(v){   
    v=v.replace(/\D/g,"");//Remove tudo o que não é dígito   
    v=v.replace(/(\d)(\d{8})$/,"$1.$2");//coloca o ponto dos milhões   
    v=v.replace(/(\d)(\d{5})$/,"$1.$2");//coloca o ponto dos milhares   	  

    v=v.replace(/(\d)(\d{2})$/,"$1,$2");//coloca a virgula antes dos 2 últimos dígitos   
    return v;   
} 
</script> 

 

E HTML:

<td align="Left"><input name="pesquisa_valor" onkeypress="mascara( this, mvalor );"  size="10" id="pesquisa_valor" type="text" value="<?=$_POST['pesquisa_valor'] ?>" /></td>

 

Será q tem algo errado?

 

Valeu

 

=======================================================

Fiz em um documento separado do zero, longe do resto do meu codigo e tbm nao deu em nada:

<html>
<head>
<title>teste</title>
<script type="text/javascript">
function mvalor(v){   
    v=v.replace(/\D/g,"");//Remove tudo o que não é dígito   
    v=v.replace(/(\d)(\d{8})$/,"$1.$2");//coloca o ponto dos milhões   
    v=v.replace(/(\d)(\d{5})$/,"$1.$2");//coloca o ponto dos milhares   	  

    v=v.replace(/(\d)(\d{2})$/,"$1,$2");//coloca a virgula antes dos 2 últimos dígitos   
    return v;   
} 
</script> 
</head>
<body>
<table width="100%" border="0" cellpadding="1" cellspacing="1" id="grid">
       <tr>
         <td align="Left" width="25%"><b>Valor Total em Compras</b></td>
         <td align="Left"><input name="pesquisa_valor" id="pesquisa_valor" onkeypress="mascara( this, mvalor );"  maxlength="14" size="15"  type="text" value="<?=$_POST['pesquisa_valor'] ?>" /></td>
       </tr>
</table>
</body>
</html>

Compartilhar este post


Link para o post
Compartilhar em outros sites

faltou essas 2 funções:

 

/* Máscaras ER */
function mascara(o,f){
   v_obj=o
   v_fun=f
   setTimeout("execmascara()",1)
}
function execmascara(){
   v_obj.value=v_fun(v_obj.value)
}

elas são obrigatorias.

 

aprenda a debugar teu codigo:

http://www.wbruno.com.br/blog/2011/03/31/como-debugar-javascript-firefox-erros-comuns/

Compartilhar este post


Link para o post
Compartilhar em outros sites

Poxa cara valeu deu certo agora....qdo você falou q era só usar a funcao do mvalor() eu já fui direto nela...mas agora deu certo coloquei do jeito q você passou

 

Pergunta meio boba...se eu quissesse nao mostra a virgula, e somente colocar o ponto no milhares, seria só tirar

 

v=v.replace(/(\d)(\d{2})$/,"$1,$2");//coloca a virgula antes dos 2 últimos dígitos  

 

Pq eu uso este campo para fazer um consulta ao banco entao logico q daria erro já q o banco trabalha com ponto

 

Deixa te perguntar uma coisa relacionada a JS, eu já vi q se sabe pra caramba do assunto, todo topico de JS q eu preciso se sempre dá conta de me ajudar...você aprendeu por algum curso ou livro? Tem como me passar o nome do livro ou livros?

 

Valeu

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pq eu uso este campo para fazer um consulta ao banco entao logico q daria erro já q o banco trabalha com ponto

no caso então, você vai precisar de mais do que isso.

o banco trabalha dessa forma: 1,000.00 sistema americano de numeração.

 

ou seja, o melhor é você converter a notação com a tua linguagem server-side.

Deixa o usuario digitar normalmente.

 

 

você aprendeu por algum curso ou livro? Tem como me passar o nome do livro ou livros?

sou pessimo pra indicar 'como aprendi'. Mas comece lendo quantos tutoriais você conseguir, e leia tudo.

declaração de funções, de variaveis, mesmo que seja básico e você 'ache' que já sabe.

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.