Ir para conteúdo

Arquivado

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

Borel

Formatar campo

Recommended Posts

Estou querendo formatar um campo em que será colocado um preço de produto. Queria que quando a pessoa começasse a digitar o valor fosse colocando a vírgula e também o ponto.

Um exemplo: Site dos Correios

 

Será que alguém pode me ajudar?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estou querendo formatar um campo em que será colocado um preço de produto. Queria que quando a pessoa começasse a digitar o valor fosse colocando a vírgula e também o ponto.

Um exemplo: Site dos Correios

 

Será que alguém pode me ajudar?

<{POST_SNAPBACK}>

Eu quero fazer o mesmo, só que com um campo hora. gostaria que de dois em dois caracteres ele fosse adicionando o ":".

Fiz algo pra que ele adicionasse :00:00 se a pessoa digitasse apenas a hora e :00 se digitasse hora e minuto, mas é só. Pra aparecer enquanto digita to querendo ainda.

Segueo codigo que fiz:

 

<script language="JavaScript">

function hora_correta() {

campo = document.forms[0].fim.value;

if(campo.length == 0) {

campo = document.forms[0].fim.value = campo = document.forms[0].fim.value + "00:00:00";

}else if(campo.length < 3) {

campo = document.forms[0].fim.value = campo = document.forms[0].fim.value + ":00:00";

}else if(campo.length < 6) {

campo = document.forms[0].fim.value = campo = document.forms[0].fim.value + ":00";

}

 

}

</script>

Compartilhar este post


Link para o post
Compartilhar em outros sites

AAlves,

 

Kra, funcionou perfeito... você teria algum script identico a esse só que usando 4 casas decimais no lugar de 2???

Compartilhar este post


Link para o post
Compartilhar em outros sites

AAlves,

 

Eu tenho uma funcao aqui q é exatamente o q eu quero... só q ela utiliza 2 casas decimais... você saberia onde devo modificar para ficar com 4 casas decimais?

 

A funcao é:

 

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;  // Enterkey = String.fromCharCode(whichCode);  // Get key value from key codeif (strCheck.indexOf(key) == -1) return false;  // Not a valid keylen = 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 = '';// Aqui tem que testar: se $Column->{decimals} for 3 coloca + '0' + '0' + senão, apenas + '0' +if (len == 1) fld.value = '0' + decSep + '0' + aux; // Alterei coloquei + '0' , decSep = , (vírgula)// Aqui tem que testar: se $Column->{decimals} for 3 coloca + '0' + senão, não colocaif (len == 2) fld.value = '0' + decSep + aux; // Alterei coloquei + '0'// Aqui tem que testar: se $Column->{decimals} for 3 coloca essa linha senão não coloca//if (len == 3) fld.value = '0' + decSep + aux + aux2; // Adicionei esta linha// Aqui tem que colocar a variável $decimalif (len > 2) { // Alterei de 2 para 3 aux2 = ''; // A cada três caracteres adiciona um milSep (ponto ".") for (j = 0, i = len - 3; i >= 0; i--) {  if (j == 3) {   aux2 += milSep;   j = 0;  }  aux2 += aux.charAt(i);  j++; } fld.value = ''; len2 = aux2.length; // Aqui tem que testar: se $Column->{decimals} for 3 coloca i > 0 senão coloca i >= 0 for (i = len2 - 1; i >= 0; i--) // Alterei de i >= 0 para i > 0 fld.value += aux2.charAt(i); // Aqui tem que coloca a variável mo lugar do 3 fld.value += decSep + aux.substr(len - 2, len); }return false;}
Tipo, se o usuario fosse entrar com o valor de 15 reais...

 

Ele iria digitar o 1 primeiro ficando assim:

0,0001

 

Depois entraria com o 5:

0,0015

 

Depois iria entrando com 0 ate ficar assim:

15,0000

 

Desculpe a amolação... é q nao manjo nda de JS... :(/>

 

Se puder me ajudar, agradeceria mto!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

AAlves,

 

Tentei aqui adaptar o seu codigo mas nao funcionou... tipo, para o trampo q estou desenvolvendo, eles vendem parafusos... entao ele usam valores com 4 casas decimais...

 

O seu script se for entrar com o valor tipo:

0,4526

 

Ele nao funciona... no seu script fica assim:

045,26

 

O script q passei acima, funciona... só q ele utiliza 2 casas decimais... :(/>

 

O problema é q preciso desse script pra hj ainda... senao vai ter esporro!!! http://forum.imasters.com.br/public/style_emoticons/default/cry.gif/>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Adaptei pra você o meu código de 2 casas para 4:

 

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;
key = String.fromCharCode(whichCode);
if (strCheck.indexOf(key) == -1) return false;
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 + aux2;
if (len == 4) fld.value = '0' + decSep + aux + aux2 + aux2;
if (len > 4) {
 aux2 = '';

 // A cada quatro caracteres adiciona um milSep (ponto)
 for (j = 4, i = len - 5; 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 - 4, len);
}
return false;

}

 

Espero que te ajude! http://forum.imasters.com.br/public/style_emoticons/default/joia.gif/>

 

Abraço,

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fael,CARACAAAAAAAAAAA!!!Funcionou!!!!!!!!!!!!!!!!!! uhuuuhuhuh.... ehehheeAgora, só pra ficar perfeito... você saberia usar uma mascara? Tipo, o campo teria o valor inicial assim:0,0000Ai o usuario vai entrar com um valor tipo 15 reais...Ele digita o 1:0,0001Digita o 5:0,0015Vai digitando 0 ate completar o campo:0,01500,15001,500015,0000

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas essa máscara já aparece no momento em que você começa a digitar, você queria que já tivesse a máscara sem o cara digitar nada?Isso é meio complicado, pois o usuário pode clicar no meio dos zeros para começar a digitar, a não ser que coloque a máscar e quando o cara clicar no campo, esse valor default é apagado. O que você acha?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Entao, eu precisaria q ja tivesse a mascara no campo sem o usuario digitar nda... tipo, abre a pagina com o form, e a mascara ja ta lá no campo...O problema do usuario clicar no meio do campo e comecar a digitar nao tem problema... pq com a funcao alinhar a direita do textbox, ele impede q os valores sejam inseridos no meio do campo... assim, se ele digitar alguma coisa, o valor sera inserido no fim do campo...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fael,

 

Teve um probleminha qto a formatacao qdo vai adicionand pontos... tipo, se for entrar com o valor 10.000 (dez mil)... ta ficando assim:

 

1.0000,0000

 

Dei uma olhada na função e vi esse for:

 

// A cada quatro caracteres adiciona um milSep (ponto)for (j = 4, i = len - 5; i >= 0; i--) {if (j == 4) {aux2 += milSep;j = 0;}

Creio q teria q ser a cada 3 casas adicionar um "." (ponto). Entao seria só trocar os 4 por 3? Ficando assim:

 

// A cada quatro caracteres adiciona um milSep (ponto)for (j = 3, i = len - 5; i >= 0; i--) {if (j == 3) {aux2 += milSep;j = 0;}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Caro AAlves,Obrigado por estar me ajudando, mas é o seguinte. O script funciona quando se tem só um form na página.No meu código tem 4 forms, todos com os mesmos nomes, mas só um será usado de cada vez.O que você sugere para que o script funcione?

Compartilhar este post


Link para o post
Compartilhar em outros sites

AAlves,4 forms é porque está em um loop php para exibição de produtos que faz a passagem da variável pelo nome do campo.Só um form será enviado de cada vez, mas como estão aparecendo os quatro de uma vez, o script não está funcionando

Compartilhar este post


Link para o post
Compartilhar em outros sites

AAlves, não está funcionando a máscara de hora, enquanto você preenche, depois do 2° campo, apaga os dados digitados automaticamente e coloca :

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ele não deixa apagar quando o próximo campo é um caractere da máscara. Se estou digitando a data por exemplo 03, quando estou nessa posição ele não apaga, mas se estiver na posição 0 de 03 ele apaga porque o próximo caractere é um caractere da máscara.

 

Não sei se com essa dica você conseguirá resolver, vou ver se consigo fazer aqui, qualquer posto o code para você ver.

 

Abraço, http://forum.imasters.com.br/public/style_emoticons/default/joia.gif/>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tentei rfazer as alterações n ocamp oda hora pra ele adicionar o campo certinho mas não deu tmb. Ele acabava adicionando dois "dois pontos".Desafio maneiro esse =D

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.