Ir para conteúdo
Fórum Script Brasil
  • 0

Ajuda com mascara


Luizzzzzzzzzzzzzzzz

Pergunta

Ola pessoal...td bem?

Uma duvida... estou usando uma mascara no campo input....tá funcionando beleza...a não ser por um detalhe... quando eu digito um unico numero... por exemplo o 1 e dou um tab... ele fica assim 0,01 ... e eu quero que fique assim 1,00 ... o restante ta beleza... o formato fica assim 999.999,99

Passo abaixo a função...se alguém puder me ajudar fico agradecido.

Abraços!

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;
}

Link para o comentário
Compartilhar em outros sites

12 respostass a esta questão

Posts Recomendados

  • 0

Verifique o tamanho (propriedade length) do número !

Se for maior que 2, você utiliza a máscara !

Ps.: Faça sempre a verificação se o número é uma string (função isNaN(numero) para evitar erros, independentemente do tamanho do valor digitado)

Espero ter ajudado !

Link para o comentário
Compartilhar em outros sites

  • 0

Obrigado pela atenção de todos...

estou tentando adaptar uma função que encontrei na net... esta quase perfeito... quando eu coloco apenas 1 valor...como por exemplo o 1 ... então o valor fica 1,00 ... mas quando digito por exemplo 2 numeros como por exemplo 15 ... então preciso que fique assim 1.50 e esta ficando assim 10,05 ...ou seja ele esta pegando os 2 zeros ... bom passo o cod abaixo:

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 = aux + SeparadorDecimal + '0'+'0';
if (len == 2) objTextBox.value = aux + SeparadorDecimal;
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;
}

Acho que o problema esta na parte :

if (len == 0) objTextBox.value = '';

if (len == 1) objTextBox.value = aux + SeparadorDecimal + '0'+'0';

if (len == 2) objTextBox.value = aux + SeparadorDecimal;

Quando tem apenas 1 termo no len ... ar ele coloca o valor... mais um ponto e dois zeros... tá perfeito... mas se possuir 2 termos ele já pega esses dois zeros...e adiciona junto...

valeu galera

Tá dificil encontrar a solução... é tão complicado assim de fazer isso?

Obrigado pessoal

Editado por Luizzzzzzzzzzzzzzzz
Link para o comentário
Compartilhar em outros sites

  • 0
Tá dificil encontrar a solução... é tão complicado assim de fazer isso?

o lance é que não é complicado, o caso é que as mascaras de moedas sempre pega as casas dos decimais, e no caso como você quer ai, necessariamente a casa decimal sempre seria zero, exemplo: 1,00, aconselho você a pegar uma máscara que funcione quando você tirar o foco do campo, assim terá melhor resultado!

Link para o comentário
Compartilhar em outros sites

  • 0

Talvez eu que não esteja me expressando direito

Quando digitamos 1 e teclamos TAB ele está com o valor 10.00 e não 1.00 devido a máscara, se eu digitar 1 e der “tab” ele tem que ficar com valor 1.00.

Quando digito o valor 1.50 ele tem que ficar com a máscara 1.50 e não 01,50 e assim por diante

Link para o comentário
Compartilhar em outros sites

  • 0
O Ideal e fazer com o JQuery, e super simples,

Veja o exemplo abaixo:

jQuery(function($){

$("#moeda").mask("999.999,99");

});

Veja como usar o JQuery, com outros exemplo, qualquer duvida posta ai.

http://jquery.blog.dada.net/post/350761/M%...formul%C3%A1rio

Legal...eu já peguei um arquivo com as funções mas como aplico no formulario...?? No campo input preciso adicionar alguma coisa?

Obrigado

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...