Fóruns sobre PHP, JavaScript, HTML, MySQLi, jQuery, Banco de Dados, CSS


Moderador: web

 
Mais de 25 postagens
Mais de 25 postagens
Tópico Autor
Mensagens: 45

Cálculo de campos com valores monetários

27-05-2010 11:26

amigos Bom dia,
eu estou fazendo um formulário e pintou um probleminha.
segue o código:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <script type="text/javascript"> function soma(){ document.f1.total.value = (document.f1.valor1.value*1) + (document.f1.valor2.value*1); } 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; } </script> </head> <body> <form name="f1" method="post"> Valor 1:<input type="text" name="valor1" onkeypress="return(MascaraMoeda(this,'.',',',event))" /><br /> Valor 2:<input type="text" name="valor2" onkeypress="return(MascaraMoeda(this,'.',',',event))" /><br /> <input type="button" value="Calcular!" onclick="soma()" /><br /> Total:<input name="total" onkeypress="return(MascaraMoeda(this,'.',',',event))" type="text" readonly="readonly" /> </form> </body> </html>

a questão deste código é a seguinte.
eu tenho três campos de texto, "valor1", "valor2" e "total" como vc pode ver no script tem uma função de soma onde pega o campo valor1 e valor2 soma os dois e dá o resultado no total após clicar no botão "calcular!" e tem uma função de mascara de moeda, eu coloco os valores quando clico no botão calcular aparece NaN no total, se eu tiro a função de mascara de moeda dos campos ele calcula normalmente.
vc saberia me dizer onde está errado?

se puder me ajudar eu agradeço!

abraço!
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17562
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Cálculo de campos com valores monetários

27-05-2010 11:38

Na função que faz a soma, troca a parte do document.f1 por essa linha abaixo

document.f1.total.value = parseFloat(document.f1.valor1.value)+parseFloat(document.f1.valor2.value);

Mas esse script ai parece que tem problemas, tipo, na hora de calcular valores quebrados, também não deixa editar o campo.
0
A melhor hospedagem para o seu site HostGator!
 
Mais de 25 postagens
Mais de 25 postagens
Tópico Autor
Mensagens: 45

Cálculo de campos com valores monetários

27-05-2010 11:56

funcionou, mas tem mais um probleminha, o resultado não aparece em valor monetário, ele fica sem formatação de moeda mesmo pedindo a função MascaraMoeda.
será q não teria q pedir essa funão junto com o botão calcular?
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17562
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Cálculo de campos com valores monetários

27-05-2010 12:22

Dá uma olhada nesse script, é bem mais fácil de trabalhar

http://www.codigosnaweb.com/forum/Soma- ... _1559.html
0
A melhor hospedagem para o seu site HostGator!
 
Mais de 25 postagens
Mais de 25 postagens
Tópico Autor
Mensagens: 45

Cálculo de campos com valores monetários

31-05-2010 09:55

valeu cara, vou tentar adaptar esse código ao meu formulário.
abraço!!
0
 
Mais de 25 postagens
Mais de 25 postagens
Tópico Autor
Mensagens: 45

Cálculo de campos com valores monetários

31-05-2010 10:05

Amigo, desculpe minha ignorancia, mas vc poderia me explicar o código?
eu tentei adicionar mais campos para calculo e não deu certo. segue o código que eu alterei:
<script language="JavaScript" type="text/javascript"> function teclas(event){ if(((event.keyCode < 96) || (event.keyCode > 105)) && ((event.keyCode < 48) || (event.keyCode > 57)) ) { campo.value = campo.value.replace(String.fromCharCode(event.keyCode).toLowerCase(),""); } } function numMoeda(event,campo){ teclas(campo); str = campo.value; while(str.search(",") != -1) str = str.replace(",",""); i = 0; while(i< str.length){ if(str.substr(i,1) == ".") str = str.replace(".",""); i++; } part1 = str.substr(0,str.length - 2); while(part1.search(" ") != -1) part1 = part1.replace(" ",""); part2 = str.substr(str.length - 2,2); res = ""; i = part1.length; sob = i % 3; if((sob != 0) && (i > 2)) res = part1.substr(0,sob) + "."; else res = part1.substr(0,sob); j = 1; part1 = part1.substr(sob); i = 0; while(i < part1.length){ if(j == 3){ if(i + 1 == part1.length) res = res + part1.substr(i-2,3); else res = res + part1.substr(i-2,3) + "."; } i++; j = j<3?j+1:1; } campo.value = res + "," + part2; } function soma() { campo1 = document.form.valor1.value; campo1 = campo1.replace(/[.]/g, ""); campo1 = campo1.replace(/[,]/g, ""); campo2 = document.form.valor2.value; campo2 = campo2.replace(/[.]/g, ""); campo2 = campo2.replace(/[,]/g, ""); campo3 = document.form.valor3.value; campo3 = campo3.replace(/[.]/g, ""); campo3 = campo3.replace(/[,]/g, ""); campo4 = document.form.valor4.value; campo4 = campo4.replace(/[.]/g, ""); campo4 = campo4.replace(/[,]/g, ""); campo5 = document.form.valor5.value; campo5 = campo5.replace(/[.]/g, ""); campo5 = campo5.replace(/[,]/g, ""); if(campo1!="" && campo2!="" && campo3!="" && campo4!="" && campo5!="") { total = parseFloat(campo1)+parseFloat(campo2)+parseFloat(campo3)+parseFloat(campo4)+parseFloat(campo5); document.form.total.value=parseFloat(total); } } </script> <form name="form"> <input type="text" name="valor1" value="" onkeyup="soma();numMoeda(event,this);"> <input type="text" name="Valor2" value="" onKeyUp="soma();numMoeda(event,this);"> <input type="text" name="Valor3" value="" onKeyUp="soma();numMoeda(event,this);"> <input type="text" name="Valor4" value="" onKeyUp="soma();numMoeda(event,this);"> <input type="text" name="valor5" value="" onkeyup="soma();numMoeda(event,this);numMoeda(event,total);"> <input type="text" name="total" value=""> </form>

0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17562
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Cálculo de campos com valores monetários

31-05-2010 15:04

Peguei o original e adicionei mais um campo, olha ai que comentei cada item adicionado. Observe que agora tem campo1, campo2 e campo3, no script segue a alteração também.

<script language="JavaScript" type="text/javascript"> function teclas(event){ if(((event.keyCode < 96) || (event.keyCode > 105)) && ((event.keyCode < 48) || (event.keyCode > 57)) ) { campo.value = campo.value.replace(String.fromCharCode(event.keyCode).toLowerCase(),""); } } function numMoeda(event,campo){ teclas(campo); str = campo.value; while(str.search(",") != -1) str = str.replace(",",""); i = 0; while(i< str.length){ if(str.substr(i,1) == ".") str = str.replace(".",""); i++; } part1 = str.substr(0,str.length - 2); while(part1.search(" ") != -1) part1 = part1.replace(" ",""); part2 = str.substr(str.length - 2,2); res = ""; i = part1.length; sob = i % 3; if((sob != 0) && (i > 2)) res = part1.substr(0,sob) + "."; else res = part1.substr(0,sob); j = 1; part1 = part1.substr(sob); i = 0; while(i < part1.length){ if(j == 3){ if(i + 1 == part1.length) res = res + part1.substr(i-2,3); else res = res + part1.substr(i-2,3) + "."; } i++; j = j<3?j+1:1; } campo.value = res + "," + part2; } function soma() { campo1 = document.form.valor1.value; campo1 = campo1.replace(/[.]/g, ""); campo1 = campo1.replace(/[,]/g, ""); campo2 = document.form.valor2.value; campo2 = campo2.replace(/[.]/g, ""); campo2 = campo2.replace(/[,]/g, ""); // novo campo3 = document.form.valor3.value; campo3 = campo3.replace(/[.]/g, ""); campo3 = campo3.replace(/[,]/g, ""); // novo if(campo1!="" && campo2!="" && campo3!="") { // novo total = parseFloat(campo1)+parseFloat(campo2)+parseFloat(campo3); document.form.total.value=parseFloat(total); } } </script> <form name="form"> <input type="text" name="valor1" value="" onkeyup="soma();numMoeda(event,this);"> <!-- novo --> <input type="text" name="valor2" value="" onkeyup="soma();numMoeda(event,this);"> <input type="text" name="valor3" value="" onkeyup="soma();numMoeda(event,this);numMoeda(event,total);"> <input type="text" name="total" value=""> </form>

0
A melhor hospedagem para o seu site HostGator!
 
Mais de 25 postagens
Mais de 25 postagens
Tópico Autor
Mensagens: 45

Cálculo de campos com valores monetários

31-05-2010 16:04

se eu entendi direito, vc apenas mudou na função soma? é isso?
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17562
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Cálculo de campos com valores monetários

31-05-2010 16:36

Só fiz mudanças ali na função soma(), adicionando mais um campo, no if e no total da mesma função, está comentado assim

// novo

E adicionei um campo que também está marcado "novo"
0
A melhor hospedagem para o seu site HostGator!
 
Mais de 25 postagens
Mais de 25 postagens
Tópico Autor
Mensagens: 45

Cálculo de campos com valores monetários

31-05-2010 17:08

entendi...
estou tentando fazer com que o valor1 seja um número inteiro e não monetário e com que ele multiplique o valor2 para dar um resultado no valor3

<script language="JavaScript" type="text/javascript"> function teclas(event){ if(((event.keyCode < 96) || (event.keyCode > 105)) && ((event.keyCode < 48) || (event.keyCode > 57)) ) { campo.value = campo.value.replace(String.fromCharCode(event.keyCode).toLowerCase(),""); } } function numMoeda(event,campo){ teclas(campo); str = campo.value; while(str.search(",") != -1) str = str.replace(",",""); i = 0; while(i< str.length){ if(str.substr(i,1) == ".") str = str.replace(".",""); i++; } part1 = str.substr(0,str.length - 2); while(part1.search(" ") != -1) part1 = part1.replace(" ",""); part2 = str.substr(str.length - 2,2); res = ""; i = part1.length; sob = i % 3; if((sob != 0) && (i > 2)) res = part1.substr(0,sob) + "."; else res = part1.substr(0,sob); j = 1; part1 = part1.substr(sob); i = 0; while(i < part1.length){ if(j == 3){ if(i + 1 == part1.length) res = res + part1.substr(i-2,3); else res = res + part1.substr(i-2,3) + "."; } i++; j = j<3?j+1:1; } campo.value = res + "," + part2; } function soma() { campo1 = document.form.valor1.value; campo1 = campo1.replace(/[.]/g, ""); campo1 = campo1.replace(/[,]/g, ""); campo2 = document.form.valor2.value; campo2 = campo2.replace(/[.]/g, ""); campo2 = campo2.replace(/[,]/g, ""); // novo if(campo1!="" && campo2!="") { // novo total = parseFloat(campo1)*parseFloat(campo2); document.form.total.value=parseFloat(total); } } </script> <form name="form"> <input type="text" name="valor1" value="" onkeyup="soma();"> <input type="text" name="valor2" value="" onkeyup="soma();numMoeda(event,this);numMoeda(event,total);""> <input type="text" name="total" value=""> </form>

desta forma funciona.
estou colocando o código num arquivo .js para linkar no html
vamos ver se dá certo!
abraço!
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17562
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Cálculo de campos com valores monetários

31-05-2010 17:24

Blz.
0
A melhor hospedagem para o seu site HostGator!
 
Mais de 25 postagens
Mais de 25 postagens
Tópico Autor
Mensagens: 45

Cálculo de campos com valores monetários

01-06-2010 10:07

bom dia amigo,
sabe o que eu acho estranho, aquele script funciona bem quando não tem uma tabela, seria possível fazer ele funcionar dentro de uma tabela?
eu coloco o script e faço o form dentro de uma tabela ele não funciona.

abraço!
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17562
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Cálculo de campos com valores monetários

01-06-2010 11:22

Talvez seja pelas tags form. Coloca elas fora da tabela

<form actio...
<table...

</table>
</form>
0
A melhor hospedagem para o seu site HostGator!
 
Mais de 25 postagens
Mais de 25 postagens
Tópico Autor
Mensagens: 45

Cálculo de campos com valores monetários

01-06-2010 11:56

já estava fora de table, coloquei dentro e não adiantou, coloquei fora da div tbm não resolveu, não sei o q acontece, vou continuar fazendo testes.
valeu!
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17562
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Cálculo de campos com valores monetários

01-06-2010 12:21

Se possível posta o código online.
0
A melhor hospedagem para o seu site HostGator!
 
Mais de 25 postagens
Mais de 25 postagens
Tópico Autor
Mensagens: 45

Cálculo de campos com valores monetários

01-06-2010 17:55

Segue o Código resumido
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <title>Or&ccedil;amento</title> <link href="css/geral.css" rel="stylesheet" type="text/css"> </head> <body> <script language="javascript" type="text/javascript"> function teclas(event){ if(((event.keyCode < 96) || (event.keyCode > 105)) && ((event.keyCode < 48) || (event.keyCode > 57)) ) { campo.value = campo.value.replace(String.fromCharCode(event.keyCode).toLowerCase(),""); } } function numMoeda(event,campo){ teclas(campo); str = campo.value; while(str.search(",") != -1) str = str.replace(",",""); i = 0; while(i< str.length){ if(str.substr(i,1) == ".") str = str.replace(".",""); i++; } part1 = str.substr(0,str.length - 2); while(part1.search(" ") != -1) part1 = part1.replace(" ",""); part2 = str.substr(str.length - 2,2); res = ""; i = part1.length; sob = i % 3; if((sob != 0) && (i > 2)) res = part1.substr(0,sob) + "."; else res = part1.substr(0,sob); j = 1; part1 = part1.substr(sob); i = 0; while(i < part1.length){ if(j == 3){ if(i + 1 == part1.length) res = res + part1.substr(i-2,3); else res = res + part1.substr(i-2,3) + "."; } i++; j = j<3?j+1:1; } campo.value = res + "," + part2; } function soma() { campo1 = document.form.valor1.value; campo1 = campo1.replace(/[.]/g, ""); campo1 = campo1.replace(/[,]/g, ""); campo2 = document.form.valor2.value; campo2 = campo2.replace(/[.]/g, ""); campo2 = campo2.replace(/[,]/g, ""); // novo if(campo1!="" && campo2!="") { // novo total = parseFloat(campo1)+parseFloat(campo2); document.form.total.value=parseFloat(total); } } </script> <div id="total"> <h1 id="tit_orca">Or&ccedil;amento On-line</h1> <div id="tabela_orc"> <table border="0" id="tabela_dados"> <form method="POST" name="form"> <tr> <td class="font_prod">Empresa:</td> <td width="150"> <input type="text" size="50" maxlength="100" tabindex="1" name="empresa"> </td> <td align="right" class="font_prod">Tel:</td> <td> <input type="text" size="20" maxlength="100" tabindex="2" name="tel"> </td> </tr> <tr> <td class="font_prod">Nome:</td> <td> <input type="text" size="50" maxlength="50" tabindex="3" name="nome"> </td> <td align="right" class="font_prod">E-mail:</td> <td> <input type="text" size="20" maxlength="50" tabindex="4" name="mail"> </td> </tr> </table> <table border="1" id="tabela_orca"> <tr> <td class="cod">Produto:</td> <td class="descr">C&oacute;digo e Descri&ccedil;&atilde;o do Produto:</td> <td class="cor">Cor:</td> <td class="qtd">Qtd.:</td> <td class="prc">Valor Unit.:</td> <td class="prc">Valor Total:</td> </tr> <tr align="center"> <td> <select id="select1" style="width:110px" name="familia" tabindex="5"> <option title="-" value="0" selected>Escolha...</option> <option title="adaptadores" value="1">Adaptadores</option> <option title="auxilia" value="2">Auxiliares</option> <option title="chaves" value="3">Chaves</option> <option title="conect" value="4">Conectores</option> <option title="portafuse" value="5">Porta Fus&iacute;veis</option> <option title="tomnbr" value="6">Tomadas NBR</option> <option title="tomexp" value="7">Tomadas Export.</option> </select> </td> <td> <select style="width:370px" name="produto" tabindex="6"> <option title="-" value="-">-</option> </select> </td> <td> <select style="width:50px" name="cores" tabindex="7"> <option title="bc">BC</option> <option title="cz">CZ</option> <option title="pt">PT</option> <option title="vm">VM</option> </select> </td> <td> <input type="text" name="valor1" value="" onKeyUp="soma();"> </td> <td> <input type="text" name="valor2" value="" onKeyUp="soma();numMoeda(event,this);numMoeda(event,total);"> </td> <td> <input type="text" name="total" value="" onFocus="soma();numMoeda(event,this);"> </td> </tr> <tr align="center"> </tr> </table> </form> </div> </div> </body> </html>

0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17562
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Cálculo de campos com valores monetários

01-06-2010 17:58

Parece ok.
0
A melhor hospedagem para o seu site HostGator!
 
Mais de 25 postagens
Mais de 25 postagens
Tópico Autor
Mensagens: 45

Cálculo de campos com valores monetários

02-06-2010 09:00

parece ok sim, mas não funciona! rsrsrs
estranho não?
eu coloco a quantidade e nos campos valor unit. e valor total, fica uma vírgula e quando digito os valores, qualquer número fica depois da virgula não aceita a formatação monetária.
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17562
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Cálculo de campos com valores monetários

02-06-2010 09:39

Agora ví, é no IE somente, no FF tá ok, vou verificar.
0
A melhor hospedagem para o seu site HostGator!
 
Mais de 25 postagens
Mais de 25 postagens
Tópico Autor
Mensagens: 45

Cálculo de campos com valores monetários

02-06-2010 10:04

será que vou ter q usar hack para funfar no ie??
vou pesquisar algo a respeito!
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17562
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Cálculo de campos com valores monetários

02-06-2010 10:19

Eu tive olhando aqui o último script que mandei, o que somei um campo, e está ok no IE, então, o problema foi nesse novo campo que você adicionou: "quantidade"
0
A melhor hospedagem para o seu site HostGator!
 
Mais de 25 postagens
Mais de 25 postagens
Tópico Autor
Mensagens: 45

Cálculo de campos com valores monetários

02-06-2010 10:21

a alteração que eu fiz nesse campo quantidade, foi tirar a função "numMoeda(event,this)" e deixar apenas a finção "soma()", impossível ter alterado a programação toda por causa disso!
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17562
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Cálculo de campos com valores monetários

02-06-2010 10:36

Pelo que ví você não relacionou o campo quantidade no script, por isso está dando erro. Na relação valor1, valor2...
0
A melhor hospedagem para o seu site HostGator!
 
Mais de 25 postagens
Mais de 25 postagens
Tópico Autor
Mensagens: 45

Cálculo de campos com valores monetários

02-06-2010 10:47

no IE 8 funciona bem, mas no 7 ou 6 não funciona :puke: , infelizmente vou ter que dar um jeito de funcionar, pq ainda tem muita gente que nao atualiza o IE. :envy:
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17562
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Cálculo de campos com valores monetários

02-06-2010 10:53

Então seu script tem que ser assim:

3 campos: valor, quantidade e total

valor x quantidade = total, certo?
0
A melhor hospedagem para o seu site HostGator!

Quem está online

Usuários navegando neste fórum: Google [Bot]