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

(Resolvido) Operações matemáticas sem clicar em botao


Notax

Pergunta

Pessoal, bom dia.

Tenho os segintes textfields:

qtde1 | vunit1 | subtotal1

qtde2 | vunit2 | subtotal2

total

queria fazer o seguinte:

qtde1 x vunit1 = subtotal1

qtde2 x vunit2 = subtotal2

subtotal1 + subtotal2 = total

os campos vunit, subtotal e total estou usando uma mascara de moeda... e eu queria que fizesse as operações automaticamente sempre que o user trocasse de foco... é possível? sem clicar em nenhum botão específico, apenas trocando de foco, usando tab ou clicando em outro campo? Podem me ajudar?

[]'s Notax

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

11 respostass a esta questão

Posts Recomendados

  • 0

valeu... funcionou aqui... mas olha só... ficou assim

function calculo() {
qtde1 = document.form.qtde1.value;
qtde2 = document.form.qtde2.value;
valor1 = document.form.valor1.value;
valor2 = document.form.valor2.value;
resultado1 = (eval(qtde1)+eval(valor1));
resultado2 = (eval(qtde2)+eval(valor2));
document.form.subtotal1.value = resultado1;
document.form.subtotal2.value = resultado2;
}
os textfield estao assim:
<input name="subtotal1" type="text" id="subtotal1" size="13" value=resultado1 onBlur="return calculo()">   
<input name="subtotal2" type="text" id="subtotal2" size="13" value=resultado2 onBlur="return calculo()">
só que se eu quiser preencher apenas os primeiros campos... ou seja, qtde1 e valor1 o subtotal1 funciona beleza... mas automaticamente já preenche com NaN o subtotal2, coisa que eu preciso dar um jeito de evitar... além disso, as vezes pode ser necessário deixar o qtde2 valor2 em branco, mas desta forma o subtotal2 fica assim NaN!... como faço pra se não preencher nada nos campos qtde2 e valor2 o subtotal2 continuar em branco? porque se não ele incluirá o resultado NaN no BD além de ficar muito feio! Tava pensando em usar algo do tipo if is null, ou alguma função que substituisse NaN por nada! Alguém pode dar uma forcinha? EDITANDO: Tentei assim mas continua não rolando:
if(isNaN(resultado2)) {
subtotal2.value=0;
}
tentei assim tb... mas tb não deu!
if (document.form.qtde2.value == "")||(document.form.valor2.value == "")
{
document.form.subtotal2.value = "0";
}

[]'s Notax

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

  • 0

Bom... além desse probleminha com NaN, agora estou com problemas tb para multiplicar valores com , tipo: 3 * 2,5

se eu coloco 3*2.5 vai beleza... mas 2,5 sempre resulta em 0... e além de tudo tem esse problema com NaN... onde eu precisava uma função onde se o campox está vazio e o campo y está vazio então o campo z tb tem que ficar vazio...

o campo valor tem que alem de tudo ser formatado para moeda... bah... que dureza!

será que rola uma força... fiquei meio perdido agora!

[]'s Notax

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

  • 0

Cara o NAN acho que se você trocar o valor "" (branco ou nulo) por 0 na hora de somar vai dar certo. Tenta ai.

Agora com relação aos números com decimais dê uma pesquisada em parseFloat.

Um exemplo simples:

var valor = valor + ( parseFloat(document.getElementById("seuvalor").value) * parseFloat(document.getElementById("suaqtde").value) );

Faça um teste

Link para o comentário
Compartilhar em outros sites

  • 0
Mas como eu poderia fazer isso? porque o valor tem que ficar nulo... ser ficar 0 vai incluir 0 no bd...

Sinceramente não vejo a diferença entre nulo e 0.

E zero têm a vantagem de se poder usá-lo em select´s no banco. Com null as vezes o retorna não é o desejado.

Mas deixando a filosofia de lado é fácil solucionar este problema já que não se pode gravar 0 na base de dados.

No script de calculo você sempre troca o null ou " " por 0 dai acho que resolve o NAN.

quando você for efetuar a gravação você troca os valores com 0 para null ou "" isto pode ser efetuado antes de monta seu sql no proprio asp. Se você estiver utilizando Stored Procedure pode efetuar esta troca na propria stored procedure.

Mas conselho de uma p*** velha que já apanhou muito deixa o 0 no bd. :lol:

Mas é só um consellho.

Link para o comentário
Compartilhar em outros sites

  • 0

valeu pela atenção mais uma vez...

mas imaginemos um bd com os seguintes campos:

qtde | valor unitario | subtotal

e eu vou inserir fazendo com um "for" resquisitando os campos do form da seguinte forma:

request.form ("qtde1")

request.form ("valor1")

request.form ("subtotal1")

request.form ("qtde2")

request.form ("valor2")

request.form ("subtotal2")

Se no form os campos qtde2 e valor2 estiverem 0 ele vai incluir no 0 no bd na referida linha já estiverem em branco ele não vai incluir nada no bd... mas se estiverem em branco e M$@$#@ do subtotal2 fica como:"NaN" então ele continua incluindo uma nova linha no bd colocando NaN em subtotal deixando qtde2 e valor2 em branco...

o que eu preciso é deixar os inputs em branco mas que o subtotal continue em branco

não sei se eu consegui me explicar... mas de qualquer fora agradeço a atenção.

[]'s Notax

Link para o comentário
Compartilhar em outros sites

  • 0

Não vejo problemas e realmente não entedi os problema relados. Mas seu meio lerdo mesmo.

Bom eu faria o seguinte:

No script trocaria o "", null ou " " por zero. Dai resolveria a parada do NAN.

No asp antes de gravar usando o pedaçõ de codigo que você postou faria a seguinte alteração:

qtde1 = request.form ("qtde1")
if qtde1 = 0 then
    qtde1 = ""
end if    
valor1 = request.form ("valor1")
if valor1 = 0 then
    valor1 = ""
end if

Estamos nos entendendo ou estou complicando o caso? :blush:

Link para o comentário
Compartilhar em outros sites

  • 0

Entendi... e realmente tu tens razão... fica bem mais fácil! eu é que sou lerdo! rssssssssss...

então ta quase quase... se puder me dar uma ultima forcinha...

to usando a seguinte função pra formatar o valor:

<script type="text/javascript">
function mascara_num(obj){
  valida_num(obj)
  if (obj.value.match("-")){
    mod = "-";
  }else{
    mod = "";
  }
  valor = obj.value.replace("-","");
  valor = valor.replace(",","");
  if (valor.length >= 3){
    valor = poe_ponto_num(valor.substring(0,valor.length-2))+","+valor.substring(valor.length-2, valor.length);
  }
  obj.value = mod+valor;
}
function poe_ponto_num(valor){
  valor = valor.replace(/\./g,"");
  if (valor.length > 3){
    valores = "";
    while (valor.length > 3){
      valores = "."+valor.substring(valor.length-3,valor.length)+""+valores;
      valor = valor.substring(0,valor.length-3);
    }
    return valor+""+valores;
  }else{
    return valor;
  }
}
function valida_num(obj){
  numeros = new RegExp("[0-9]");
  while (!obj.value.charAt(obj.value.length-1).match(numeros)){
    if(obj.value.length == 1 && obj.value == "-"){
      return true;
    }
    if(obj.value.length >= 1){
      obj.value = obj.value.substring(0,obj.value.length-1)
    }else{
      return false;
    }
  }
}
</script>
e to usando conforme você sugeriu o codigo de multiplicação da seguinte forma:
var resultado1 = ( parseFloat(document.getElementById("valor1").value) * parseFloat(document.getElementById("qtde1").value) );

até aqui foi... eu to dexando valor inicial como zero desta forma resolveu tb o NaN... o campo valor está como moeda... está multiplicando está tudo beleza! PORÉM... o resultado1 não fica em formato moeda... mesmo tendo deixado o input da forma como está abaixo... mas se eu for la no input e digitar mais dois 00 fica belza... colca virgula direitinho... mas eu precisava que ao multiplcar o resultado já ficasse no formato correto... tem como?

o input do resultado está assim e não funciona automaticamente:

<input name="subtotal1" type="text" id="subtotal1" size="13" onBlur="return calculo()" onkeyup="mascara_num(this);">

valeu a força.

[]'s Notax

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

  • 0

Vamo lá! você deve ter paciência comigo porque não muito fluente em JavaScript! Na verdade conheço bem pouco de JavaScript! :blush:

Por tanto paciência! :blush:

Bom onde você esta zerando faça assim:

document.getElementById("suaqtde").value = "0,00"
E utilizar "0,00" para iniciar as variaceis e nos if´s tipo:
if (document.getElementById("seucampo").value <= "0,00" )

Brother são sé elocubrações mas tenta ai.

Editado por jothaz
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,2k
    • Posts
      651,9k
×
×
  • Criar Novo...