Jump to content

Soma e resultado é NaN


powerPT
 Share

Recommended Posts

Já pesquisei sobre o assunto mas não encontrei nenhuma solução válida.

Tenho um formulário em que tem x campos e mediante um evento qualquer (não importa) faz a soma dos tais campos.

O problema é que usando esta função:

function soma_total()
{
	resultado = parseInt(document.getElementById("valor_senior").value) + parseInt(document.getElementById("valor_senior2125").value) + parseInt(document.getElementById("valor_veterano").value) + parseInt(document.getElementById("valor_superveterano").value) + parseInt(document.getElementById("valor_senhora").value) + parseInt(document.getElementById("valor_junior").value) + parseInt(document.getElementById("valor_h_apa").value) + parseInt(document.getElementById("valor_h_suplm").value) + parseInt(document.getElementById("valor_ap_apa").value) + parseInt(document.getElementById("valor_ap_suplm").value);

	document.getElementById("valor_total").value = resultado;
}

O resultado escrito no textfield "valor_total" é NaN.

Alguém pode-me ajudar? Ainda por cima tenho somais parciais e tudo funciona.

Até posso mostrar a tal outra função:

function soma_parcial(pessoas,custo,campo)
{
	resultado = parseInt(document.getElementById(pessoas).value) * parseInt(custo);
	document.getElementById(campo).value = resultado;
}

MD

Link to comment
Share on other sites

Cá está:

<!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" />
<title>Inscrição Mundial</title>
<style>
h1 {
font-size: 18px;
}
h2 {
font-size: 15px;
}
h6 {
font-size: 11px;
font-weight:normal;
margin: 0;
}
body, td, th {
font-family: Verdana, Geneva, sans-serif;
font-size: 12px;
}
</style>
<script type="text/javascript">
function soma_parcial(pessoas,custo,campo)
{
	resultado = parseInt(document.getElementById(pessoas).value) * parseInt(custo);
	document.getElementById(campo).value = resultado;
	soma_total();
}

function soma_total()
{
	resultado = parseInt(document.getElementById("valor_senior").value) + parseInt(document.getElementById("valor_senior2125").value) + parseInt(document.getElementById("valor_veterano").value) + parseInt(document.getElementById("valor_superveterano").value) + parseInt(document.getElementById("valor_senhora").value) + parseInt(document.getElementById("valor_junior").value) + parseInt(document.getElementById("valor_h_apa").value) + parseInt(document.getElementById("valor_h_suplm").value) + parseInt(document.getElementById("valor_ap_apa").value) + parseInt(document.getElementById("valor_ap_suplm").value);

	document.getElementById("valor_total").value = resultado;
}

function validar(campo)
{
	var valor = document.getElementById(campo).value;
	if (valor == "")
	{
		document.getElementById(campo).bgColor = "red";
	}
}
</script>
</head>
</head>
<body>
<form method="post" name="inscr">
  <table width="100%" border="0" cellpadding="0" cellspacing="0">
    <tr>
      <td colspan="8"><h1>PREÇOS </h1></td>
    </tr>
    <tr bgcolor="#d4d2fa">
      <td width="510" bgcolor="#d4d2fa"><h2> </h2></td>
      <td width="44" align="right" bgcolor="#d4d2fa"> </td>
      <td width="13" align="center" bgcolor="#d4d2fa"> </td>
      <td width="54" align="center" bgcolor="#d4d2fa"><h4>Nº de Pessoas</h4></td>
      <td width="16" align="center" bgcolor="#d4d2fa"><h4> </h4></td>
      <td width="46" align="right" bgcolor="#d4d2fa"><h4>Total Parcial</h4></td>
      <td width="20" bgcolor="#d4d2fa"> </td>
      <td width="407"> </td>
    </tr>
    <tr bgcolor="#e1e0f1">
      <td bgcolor="#e1e0f1">Sénior</td>
      <td align="right" bgcolor="#e1e0f1">545€</td>
      <td width="13" align="center" bgcolor="#e1e0f1">x</td>
      <td align="center" bgcolor="#e1e0f1"><label>
          <input name="senior_pessoas" type="text" id="senior_pessoas" onchange="javascript:soma_parcial('senior_pessoas','545','valor_senior');" value="0" size="3" />
        </label></td>
      <td align="center" bgcolor="#e1e0f1">=</td>
      <td align="right" bgcolor="#e1e0f1"><input name="valor_senior" type="text" id="valor_senior" size="7" readonly="readonly" /></td>
      <td bgcolor="#e1e0f1">€</td>
      <td bgcolor="#e1e0f1"> </td>
    </tr>
    <tr bgcolor="#ebeafc">
      <td bgcolor="#ebeafc">Sénior (21-25)*</td>
      <td align="right" bgcolor="#ebeafc">295€</td>
      <td width="13" align="center" bgcolor="#ebeafc">x</td>
      <td align="center" bgcolor="#ebeafc"><input name="senior2125_pessoas" type="text" id="senior2125_pessoas" onchange="javascript:soma_parcial('senior2125_pessoas','295','valor_senior2125');" value="0" size="3" /></td>
      <td align="center" bgcolor="#ebeafc">=</td>
      <td align="right" bgcolor="#ebeafc"><input name="valor_senior2125" type="text" id="valor_senior2125" size="7" readonly="readonly" /></td>
      <td bgcolor="#ebeafc">€</td>
      <td> </td>
    </tr>
    <tr bgcolor="#e1e0f1">
      <td>Veterano</td>
      <td align="right">425€</td>
      <td width="13" align="center">x</td>
      <td align="center"><input name="veterano_pessoas" type="text" id="veterano_pessoas" onchange="javascript:soma_parcial('veterano_pessoas','425','valor_veterano');" value="0" size="3" /></td>
      <td align="center">=</td>
      <td align="right"><input name="valor_veterano" type="text" id="valor_veterano" size="7" readonly="readonly" /></td>
      <td>€</td>
      <td> </td>
    </tr>
    <tr bgcolor="#ebeafc">
      <td>Super Veterano</td>
      <td align="right">255€</td>
      <td width="13" align="center">x</td>
      <td align="center"><input name="superveterano_pessoas" type="text" id="superveterano_pessoas" onchange="javascript:soma_parcial('superveterano_pessoas','255','valor_superveterano');" value="0" size="3" /></td>
      <td align="center">=</td>
      <td align="right"><input name="valor_superveterano" type="text" id="valor_superveterano" size="7" readonly="readonly" /></td>
      <td>€</td>
      <td> </td>
    </tr>
    <tr bgcolor="#e1e0f1">
      <td bgcolor="#e1e0f1">Senhora</td>
      <td align="right">175€</td>
      <td width="13" align="center">x</td>
      <td align="center"><input name="senhora_pessoas" type="text" id="senhora_pessoas" onchange="javascript:soma_parcial('senhora_pessoas','175','valor_senhora');" value="0" size="3" /></td>
      <td align="center">=</td>
      <td align="right"><input name="valor_senhora" type="text" id="valor_senhora" size="7" readonly="readonly" /></td>
      <td>€</td>
      <td> </td>
    </tr>
    <tr bgcolor="#ebeafc">
      <td>Júnior*</td>
      <td align="right">45€</td>
      <td width="13" align="center">x</td>
      <td align="center"><input name="junior_pessoas" type="text" id="junior_pessoas" onchange="javascript:soma_parcial('junior_pessoas','45','valor_junior');" value="0" size="3" /></td>
      <td align="center">=</td>
      <td align="right"><input name="valor_junior" type="text" id="valor_junior" size="7" readonly="readonly" /></td>
      <td>€</td>
      <td> </td>
    </tr>
    <tr>
      <td colspan="8" valign="top" bgcolor="#e1e0f1"><h6>* valor a completar em caso de prémio | Estão excluídas as provas extras</h6></td>
    </tr>
    <tr>
      <td colspan="8" bgcolor="#d4d2fa"><h2> </h2></td>
    </tr>
    <tr bgcolor="#e1e0f1">
      <td bgcolor="#e1e0f1">HOTEL SOLVERDE *****<br /></td>
      <td align="right"> </td>
      <td width="13" align="center"> </td>
      <td align="center"> </td>
      <td align="center"> </td>
      <td align="right"> </td>
      <td> </td>
      <td> </td>
    </tr>
    <tr>
      <td bgcolor="#ebeafc">em regime APA</td>
      <td align="right" bgcolor="#ebeafc">726€</td>
      <td width="13" align="center" bgcolor="#ebeafc">x</td>
      <td align="center" bgcolor="#ebeafc"><input name="hsol_apa_pessoas" type="text" id="hsol_apa_pessoas" onchange="javascript:soma_parcial('hsol_apa_pessoas','726','valor_h_apa');" value="0" size="3" /></td>
      <td align="center" bgcolor="#ebeafc"> </td>
      <td align="right" bgcolor="#ebeafc"><input name="valor_h_apa" type="text" id="valor_h_apa" size="7" readonly="readonly" /></td>
      <td bgcolor="#ebeafc">€</td>
      <td bgcolor="#ebeafc"> </td>
    </tr>
    <tr>
      <td bgcolor="#ebeafc">sumplemento quarto individual</td>
      <td align="right" bgcolor="#ebeafc">335€</td>
      <td width="13" align="center" bgcolor="#ebeafc">x</td>
      <td align="center" bgcolor="#ebeafc"><input name="hsol_suplm_pessoas" type="text" id="hsol_suplm_pessoas" onchange="javascript:soma_parcial('hsol_suplm_pessoas','335','valor_h_suplm');" value="0" size="3" /></td>
      <td align="center" bgcolor="#ebeafc"> </td>
      <td align="right" bgcolor="#ebeafc"><input name="valor_h_suplm" type="text" id="valor_h_suplm" size="7" readonly="readonly" /></td>
      <td bgcolor="#ebeafc">€</td>
      <td bgcolor="#ebeafc"> </td>
    </tr>
    <tr>
      <td bgcolor="#e1e0f1">HOTEL APARTAMENTO SOLVERDE ***</td>
      <td align="right" bgcolor="#e1e0f1"> </td>
      <td width="13" align="center" bgcolor="#e1e0f1"> </td>
      <td align="center" bgcolor="#e1e0f1"> </td>
      <td align="center" bgcolor="#e1e0f1"> </td>
      <td align="right" bgcolor="#e1e0f1"> </td>
      <td bgcolor="#e1e0f1"> </td>
      <td bgcolor="#e1e0f1"> </td>
    </tr>
    <tr>
      <td bgcolor="#ebeafc">em regime APA</td>
      <td align="right" bgcolor="#ebeafc">478€</td>
      <td width="13" align="center" bgcolor="#ebeafc">x</td>
      <td align="center" bgcolor="#ebeafc"><input name="apart_apa_pessoas" type="text" id="apart_apa_pessoas" onchange="javascript:soma_parcial('apart_apa_pessoas','478','valor_ap_apa');" value="0" size="3" /></td>
      <td align="center" bgcolor="#ebeafc"> </td>
      <td align="right" bgcolor="#ebeafc"><input name="valor_ap_apa" type="text" id="valor_ap_apa" size="7" readonly="readonly" /></td>
      <td bgcolor="#ebeafc">€</td>
      <td bgcolor="#ebeafc"> </td>
    </tr>
    <tr>
      <td bgcolor="#ebeafc">suplemento quarto individual</td>
      <td align="right" bgcolor="#ebeafc">198€</td>
      <td width="13" align="center" bgcolor="#ebeafc">x</td>
      <td align="center" bgcolor="#ebeafc"><input name="apart_suplm_pessoas" type="text" id="apart_suplm_pessoas" onchange="javascript:soma_parcial('apart_suplm_pessoas','198','valor_ap_suplm');" value="0" size="3" /></td>
      <td align="center" bgcolor="#ebeafc"> </td>
      <td align="right" bgcolor="#ebeafc"><input name="valor_ap_suplm" type="text" id="valor_ap_suplm" size="7" readonly="readonly" /></td>
      <td bgcolor="#ebeafc">€</td>
      <td bgcolor="#ebeafc"> </td>
    </tr>
    <tr>
      <td colspan="8" bgcolor="#d4d2fa"><h2>Jantar de Gala</h2></td>
    </tr>
    <tr>
      <td bgcolor="#ebeafc">(veterano / super veterano / senhora / sénior 21-25 / júnior / acompanhante ou sénior não inscrito no abono do Campeonato do Mundo)</td>
      <td align="right" bgcolor="#ebeafc">50€</td>
      <td width="13" align="center" bgcolor="#ebeafc">x</td>
      <td align="center" bgcolor="#ebeafc"><input name="jantar_pessoas" type="text" id="jantar_pessoas" onchange="javascript:soma_parcial('jantar_pessoas','50','valor_jantar');" value="0" size="3" /></td>
      <td align="center" bgcolor="#ebeafc"> </td>
      <td align="right" bgcolor="#ebeafc"><input name="valor_jantar" type="text" id="valor_jantar" size="7" readonly="readonly" /></td>
      <td bgcolor="#ebeafc">€</td>
      <td bgcolor="#ebeafc"> </td>
    </tr>
    <tr bgcolor="#e1e0f1">
      <td> </td>
      <td align="right"> </td>
      <td align="center"> </td>
      <td> </td>
      <td align="center"> </td>
      <td align="right"> </td>
      <td> </td>
      <td> </td>
    </tr>
    <tr bgcolor="#ebeafc">
      <td colspan="4" align="right"><strong>Total Final:</strong></td>
      <td align="center"> </td>
      <td align="right"><label>
          <input name="valor_total" type="text" id="valor_total" size="7" readonly="readonly" />
        </label></td>
      <td>€</td>
      <td> </td>
    </tr>
  </table>
  <table width="100%" border="0" cellpadding="0" cellspacing="0">
    <tr>
      <td colspan="3" bgcolor="#d4d2fa"><h2>FORMULÁRIO DE INSCRIÇÃO</h2></td>
    </tr>
    <tr>
      <td colspan="3" bgcolor="#e1e0f1"><p> </p></td>
    </tr>
    <tr bgcolor="#ebeafc">
      <td colspan="3"><h4>Complete os seus dados</h4></td>
    </tr>
    <tr bgcolor="#e1e0f1">
      <td width="20%">Nome Completo</td>
      <td width="35%"><label>
          <input name="nome" type="text" id="nome" size="60" />
        </label></td>
      <td width="45%"> </td>
    </tr>
    <tr bgcolor="#ebeafc">
      <td valign="top">Morada</td>
      <td><label>
          <textarea name="morada" id="morada" cols="45" rows="5"></textarea>
        </label></td>
      <td> </td>
    </tr>
    <tr bgcolor="#e1e0f1">
      <td bgcolor="#e1e0f1">Contacto</td>
      <td><label>
          <input name="contacto" type="text" id="contacto" size="15" />
        </label></td>
      <td> </td>
    </tr>
    <tr bgcolor="#ebeafc">
      <td>E-mail</td>
      <td><label>
          <input name="email" type="text" id="email" size="30" />
        </label></td>
      <td> </td>
    </tr>
    <tr bgcolor="#e1e0f1">
      <td colspan="3"><h4>Outros participantes no mesmo alojamento</h4></td>
    </tr>
    <tr bgcolor="#ebeafc">
      <td valign="top">Nomes Completos (em cada linha)</td>
      <td><label>
          <textarea name="nomes_outros" id="nomes_outros" cols="45" rows="5"></textarea>
        </label></td>
      <td> </td>
    </tr>
    <tr>
      <td colspan="3"><div id='myform_errorloc' class='error_strings'></div>
        <label>
          <input type="submit" name="submeter" id="submeter" value="Enviar Inscrição" style="background-color:#36F; color:#FFF; width: 200px; height: 50px; font-weight:bold;" />
        </label></td>
    </tr>
  </table>
</form>
</body>
</html>

MD

Link to comment
Share on other sites

Não estou a ver nada mal, talvez seja apenas uma mariquice qualquer do motor de JavaScript com data types. Experimenta assim:

   function soma_parcial(pessoas,custo,campo)
  {
      resultado = parseInt(document.getElementById(pessoas).value) * parseInt(custo);
      document.getElementById(campo).value = (string)resultado;
      soma_total();
  }

  function soma_total()
  {
      resultado = parseInt(document.getElementById("valor_senior").value)
      + parseInt(document.getElementById("valor_senior2125").value)
      + parseInt(document.getElementById("valor_veterano").value)
      + parseInt(document.getElementById("valor_superveterano").value)
      + parseInt(document.getElementById("valor_senhora").value)
      + parseInt(document.getElementById("valor_junior").value)
      + parseInt(document.getElementById("valor_h_apa").value)
      + parseInt(document.getElementById("valor_h_suplm").value)
      + parseInt(document.getElementById("valor_ap_apa").value)
      + parseInt(document.getElementById("valor_ap_suplm").value);
      
      document.getElementById("valor_total").value = (string)resultado;
  }

Se não der, vai fazendo alert()s com o resultado do typeof() e valor das variáveis até encontrares o culpado.

Btw, tens um </head> a mais.

Não peças ajuda por PM! A tua dúvida vai ter menos atenção do que se for postada na secção correcta do fórum!

Link to comment
Share on other sites

Já vi qual é o erro. Quando o .value é "", o parseInt() retorna NaN, daí estar a dar buraco. Basta usares algo como isto em vez de parseInt que já deve funcionar:

function Integer(x){ if(x == "") return 0; else return parseInt(x); }

Não peças ajuda por PM! A tua dúvida vai ter menos atenção do que se for postada na secção correcta do fórum!

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.