Ir para conteúdo

POWERED BY:

Arquivado

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

Ilano

Máscara de Moeda

Recommended Posts

Olá pessoal,

 

Eu peguei na net um excelente script para máscara de moeda descrito abaixo e gostaria de saber como faço para atribuir uma variável inical onde eu possa determinar o número de casas decimais e assim aproveitar este código em qualquer aplicação.

 

//=========================================================================

 

//MÁSCARA DE MOEDA

//Modo de usar:

//onkeypress="reais(this,event)" onkeydown="backspace(this,event)"

 

documentall = document.all;

 

function formatamoney© {

var t = this; if(c == undefined) c = 2;

var p, d = (t=t.split("."))[1].substr(0, c);

for(p = (t=t[0]).length; (p-=3) >= 1;) {

t = t.substr(0,p) + "." + t.substr(p);

}

return t+","+d+Array(c+1-d.length).join(0);

}

 

String.prototype.formatCurrency=formatamoney

 

function demaskvalue(valor, currency){

 

// Se currency é false, retorna o valor sem apenas com os números. Se é true, os dois últimos caracteres são considerados as

// casas decimais

var val2 = '';

var strCheck = '0123456789';

var len = valor.length;

if (len== 0){

return 0.00;

}

 

if (currency ==true){

// Elimina os zeros à esquerda

// a variável <i> passa a ser a localização do primeiro caractere após os zeros e

// val2 contém os caracteres (descontando os zeros à esquerda)

 

 

for(var i = 0; i < len; i++)

if ((valor.charAt(i) != '0') && (valor.charAt(i) != ',')) break;

 

for(; i < len; i++){

if (strCheck.indexOf(valor.charAt(i))!=-1) val2+= valor.charAt(i);

}

 

if(val2.length==0) return "0.00";

if (val2.length==1)return "0.0" + val2;

if (val2.length==2)return "0." + val2;

 

var parte1 = val2.substring(0,val2.length-2);

var parte2 = val2.substring(val2.length-2);

var returnvalue = parte1 + "." + parte2;

return returnvalue;

 

}

else{

// currency é false: retornamos os valores COM os zeros à esquerda,

// sem considerar os últimos 2 algarismos como casas decimais

 

val3 ="";

for(var k=0; k < len; k++){

if (strCheck.indexOf(valor.charAt(k))!=-1) val3+= valor.charAt(k);

}

return val3;

}

}

 

function reais(obj,event){

 

var whichCode = (window.Event) ? event.which : event.keyCode;

 

//Executa a formatação após o backspace nos navegadores !document.all

 

if (whichCode == 8 && !documentall) {

 

//Previne a ação padrão nos navegadores

 

if (event.preventDefault){ //standart browsers

event.preventDefault();

}else{ // internet explorer

event.returnValue = false;

}

var valor = obj.value;

var x = valor.substring(0,valor.length-1);

obj.value= demaskvalue(x,true).formatCurrency();

return false;

}

 

//Executa o Formata Reais e faz o format currency novamente após o backspace

 

FormataReais(obj,'.',',',event);

} // end reais

 

 

function backspace(obj,event){

 

//Essa função basicamente altera o backspace nos input com máscara reais para os navegadores IE e opera.

//O IE não detecta o keycode 8 no evento keypress, por isso, tratamos no keydown.

//Como o opera suporta o infame document.all, tratamos dele na mesma parte do código.

 

 

var whichCode = (window.Event) ? event.which : event.keyCode;

if (whichCode == 8 && documentall) {

var valor = obj.value;

var x = valor.substring(0,valor.length-1);

var y = demaskvalue(x,true).formatCurrency();

 

obj.value =""; //necessário para o opera

obj.value += y;

 

if (event.preventDefault){ //standart browsers

event.preventDefault();

}else{ // internet explorer

event.returnValue = false;

}

return false;

 

}// end if

}// end backspace

 

function FormataReais(fld, milSep, decSep, 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 == 8 ) return true;

//backspace - estamos tratando disso em outra função no keydown

if (whichCode == 0 ) return true;

if (whichCode == 9 ) return true; //tecla tab

if (whichCode == 13) return true; //tecla enter

if (whichCode == 16) return true; //shift internet explorer

if (whichCode == 17) return true; //control no internet explorer

if (whichCode == 27 ) return true; //tecla esc

if (whichCode == 34 ) return true; //tecla end

if (whichCode == 35 ) return true;//tecla end

if (whichCode == 36 ) return true; //tecla home

 

 

//O trecho abaixo previne a ação padrão nos navegadores. Não estamos inserindo o caractere normalmente, mas via script

 

 

if (e.preventDefault){ //standart browsers

e.preventDefault()

}else{ // internet explorer

e.returnValue = false

}

 

var key = String.fromCharCode(whichCode); // Valor para o código da Chave

if (strCheck.indexOf(key) == -1) return false; // Chave inválida

 

 

//Concatenamos ao value o keycode de key, se esse for um número

 

fld.value += key;

 

var len = fld.value.length;

var bodeaux = demaskvalue(fld.value,true).formatCurrency();

fld.value=bodeaux;

 

 

//Essa parte da função tão somente move o cursor para o final no opera. Atualmente não existe como movê-lo no konqueror.

 

if (fld.createTextRange) {

var range = fld.createTextRange();

range.collapse(false);

range.select();

}

else if (fld.setSelectionRange) {

fld.focus();

var length = fld.value.length;

fld.setSelectionRange(length, length);

}

return false;

 

}

//================================================================================

===

 

Grato,

 

Ilano.

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.