Ir para conteúdo

POWERED BY:

Arquivado

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

Rodrigo Azevedo Lima

[Resolvido] Máscara Numérica

Recommended Posts

Olá para todos.

 

Estou com o seguinte problema: tenho em meu sistema vários campos numéricos (tipo decimal) para entrada de dados. Meu cliente me pediu para que os dados fossem inseridos da direita para esquerda (tipo inserção de valores em instituições bancárias).

Achei na net um script (abaixo) que faz o que eu quero, mas, como sou leigo em js não consegui adaptá-lo para as minhas necessidades.

 

<html>
<head><title>Mascara</title>
<script LANGUAGE="JavaScript">
function currencyFormat(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 == 13) return true;  // Enter
key = String.fromCharCode(whichCode);  // Get key value from key code
if (strCheck.indexOf(key) == -1) return false;  // Not a valid key
len = fld.value.length;
for(i = 0; i < len; i++)
if ((fld.value.charAt(i) != '0') && (fld.value.charAt(i) != decSep)) break;
aux = '';
for(; i < len; i++)
if (strCheck.indexOf(fld.value.charAt(i))!=-1) aux += fld.value.charAt(i);
aux += key;
len = aux.length;
if (len == 0) fld.value = '';
if (len == 1) fld.value = '0'+ decSep + '0' + aux;
if (len == 2) fld.value = '0'+ decSep + aux;
if (len > 2) {
aux2 = '';
for (j = 0, i = len - 3; i >= 0; i--) {
if (j == 4) {
aux2 += milSep;
j = 0;
}
aux2 += aux.charAt(i);
j++;
}
fld.value = '';
len2 = aux2.length;
for (i = len2 - 1; i >= 0; i--)
fld.value += aux2.charAt(i);
fld.value += decSep + aux.substr(len - 2, len);
}
return false;
}
</script>
</head>
<body>
<form>Defina o Valor em Reais : <input type=text name=test length=15 onKeyPress="return(currencyFormat(this,'.','.',event))">
</form>

Gostaria de saber como faço para adaptá-lo às minhas máscaras (ex: 0.00, 00.00, 0.0, 000.00, etc..) ou se tem um script mais simples que posso utilizar.

 

Desde já agradeço a todos.

 

Abraços,

 

Rodrigo Lima

Compartilhar este post


Link para o post
Compartilhar em outros sites

Dá uma olhada nessas máscaras com ER:

http://forum.imasters.com.br/index.php?/topic/357459-mascara/page__p__1363848entry1363848

 

basta adaptar a ER que você precisa.

Compartilhar este post


Link para o post
Compartilhar em outros sites

^_^ como eu disse, bastava criar a ER que você precisar, para a tua máscara.

Exemplo de máscara monetária, que acabei de criar:

<html>
<head>
<script type="text/javascript">
/* 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)
}
function mcep(v){
    v=v.replace(/\D/g,"")                    //Remove tudo o que não é dígito
    v=v.replace(/^(\d{5})(\d)/,"$1-$2")         //Esse é tão fácil que não merece explicações
    return v
}
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>
		Real: <input type="text" name="valor" onkeypress="mascara( this, mvalor );" maxlength="14" />
		<br />
		CEP: <input type="text" name="cep" onkeypress="mascara(this, mcep)" size="10" maxlength="9" value="" />
</body>
</html>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Com certeza Willian, entendi perfeitamente seu script, até adaptei o mesmo às minhas necessidades, mas, o que eu não sei fazer é mudar a posição de inserção dos dados (inserindo da direita para esquerda). Sou extremamente leigo em JS.

Será que não tem como você me dá uma dica aí?

 

Obrigado!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

humm ? :huh:

 

a máscara: mvalor() não atende oque você precisa ?

dá uma olhada nela, e na do RG.. estão funcionando dessa forma 'de trás pra frente'.

Compartilhar este post


Link para o post
Compartilhar em outros sites

humm ? :huh:

 

a máscara: mvalor() não atende oque você precisa ?

dá uma olhada nela, e na do RG.. estão funcionando dessa forma 'de trás pra frente'.

 

Me desculpe William, é isso mesmo cara, estou com a cabeça tão cansada que nem reparei a diferença.

Muito obrigado mesmo, me ajudou muito.

 

Abraços e muito obrigado!!

 

Rodrigo Lima

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.