Jump to content


Photo

Problema Na Mascara Dos Campos


  • Faça o login para participar
1 reply to this topic

#1 degomes

degomes

    Novato no fórum

  • Usuários
  • 1 posts
  • Sexo:Feminino
  • Localidade:RJ

Posted 13/01/2011, 11:03

Olá, pessoal.

Estou com um problema com relação a máscara.
É o seguinte, tem campos numéricos e que tem ser separado de milhar, a cada 3 números colocar um ponto.
Porém, se eu quiser editar esse número, o número digitado está indo para o final.
Queria saber se existe alguma máscara que permita a inclusão em qualquer lugar do numeral.
Ou então se tem como modificar a função que estou usando.


A função que estou usando é esta:

function currencyFormat(fld, milSep, decSep, e, maxlength, fun) {
var sep = 0;
var key = '';
var i = j = 0;
var len = len2 = 0;
var strCheck = '0123456789-';
var aux = aux2 = '';
var whichCode = e.keyCode;

if (whichCode == 13 || whichCode == 9) {
return true; // Enter
}

if (whichCode == 8 || whichCode == 46 || whichCode == 37 || whichCode == 38
|| whichCode == 39 || whichCode == 40 || whichCode == 46
|| whichCode == 109 || whichCode == 189) {
return true;
}

if (fld.value.length >= maxlength) {
return false;
}
key = String.fromCharCode(whichCode); // Get key value from key code
if (strCheck.indexOf(key) == -1)
if (e.keyCode >= 96 && e.keyCode <= 105)
key = e.keyCode - 96;
else
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'+ '0' + aux; if (len == 2)
* fld.value = '0'+ decSep +'0'+ aux; if (len == 3) fld.value = '0'+ decSep +
* aux;
*/
// Parte em que faz o controle se o nº é negativo *******
if (fld.value.charAt(0) == '-') {
if (len == 1)
fld.value = aux;
if (len == 2)
fld.value = aux;
if (len == 3)
fld.value = aux;
if (len == 4)
fld.value = aux;

if (len > 4) {
aux2 = '';
for (j = 0, i = len - 4; i >= 0; i--) {
if (j == 3) {
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 - 3, len);
fld.value = replaceAll(fld.value, '-.', '-');
}
}
// Fim da parte de controle *******
// Caso não seja um número negativo ele entra no Else *****
else {
if (len == 1)
fld.value = aux;
if (len == 2)
fld.value = aux;
if (len == 3)
fld.value = aux;
if (len > 3) {
aux2 = '';
for (j = 0, i = len - 4; i >= 0; i--) {
if (j == 3) {
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 - 3, len);
}
}
return false;
}


Desde já agradeço.

#2 Menty

Menty

    Turista

  • Usuários
  • 26 posts
  • Sexo:Não informado

Posted 21/01/2011, 15:15

Não sei se eu entendi muito bem sua duvida....mas se foi oq eu to pensando vc quer uma mascara para moeda (tipo = 1.350,00)
eu tenho essa aki >>
/*Função Pai de Mascaras*/
    function Mascara(o,f){
        v_obj=o
        v_fun=f
        setTimeout("execmascara()",1) }
    /*Função que Executa os objetos*/
    function execmascara(){
        v_obj.value=v_fun(v_obj.value) }
    /*Função que Determina as expressões regulares dos objetos*/
    function leech(v){
        v=v.replace(/o/gi,"0")
        v=v.replace(/i/gi,"1")
        v=v.replace(/z/gi,"2")
        v=v.replace(/e/gi,"3")
        v=v.replace(/a/gi,"4")
        v=v.replace(/s/gi,"5")
        v=v.replace(/t/gi,"7")
        return v }
    /*Função que padroniza telefone (11) 4184-1241*/
    function Telefone(v){
        v=v.replace(/\D/g,"")                 
        v=v.replace(/^(\d\d)(\d)/g,"($1) $2") 
        v=v.replace(/(\d{4})(\d)/,"$1-$2")    
        return v }
    /*Função que padroniza CPF*/
    function Cpf(v){
        v=v.replace(/\D/g,"")                    
        v=v.replace(/(\d{3})(\d)/,"$1.$2")       
        v=v.replace(/(\d{3})(\d)/,"$1.$2")
        v=v.replace(/(\d{3})(\d{1,2})$/,"$1-$2") 
        return v }
    /*Função que padroniza CEP*/
    function Cep(v){
        v=v.replace(/D/g,"")                
        v=v.replace(/^(\d{5})(\d)/,"$1-$2") 
        return v }
    /*Função que padroniza DATA*/
    function Data(v){
        v=v.replace(/\D/g,"") 
        v=v.replace(/(\d{2})(\d)/,"$1/$2") 
        v=v.replace(/(\d{2})(\d)/,"$1/$2") 
        return v }
	/*Função que padroniza VALOR MONETARIO - R$*/	
	function MaskMonetario(v){
		v=v.replace(/\D/g,"");
		v=v.replace(/(\d{2})$/,",$1");
		v=v.replace(/(\d+)(\d{3},\d{2})$/g,"$1.$2");
		var qtdLoop = (v.length-3)/3; var count = 0;
		while (qtdLoop > count){ count++;
		v=v.replace(/(\d+)(\d{3}.*)/,"$1.$2");
		}v=v.replace(/^(0)(\d)/g,"$2");
		return v }
	function soNumeros(v){
    v=v.replace(/\D/g,"")
	return v }

e pra chamar essa mascara nos campos q vc kiser é simples >>> por exemplo abaixo está chamando a mascara de moeda >>
<input title="moeda" name="nome_campo" type="text" id="nome_campo" onkeydown="Mascara(this,MaskMonetario);" onkeypress="Mascara(this,MaskMonetario);" onkeyup="Mascara(this,MaskMonetario);"/>
vc só precisa colocar o nome das funções q vc kiser (q se encontra no javascript te q mandei acima)...
me desculpe se não é isso oq vc queria..mas sua duvida ta meio confusa :)

Edição feita por: Menty, 21/01/2011, 15:17.





1 user(s) are reading this topic

0 membro(s), 1 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq