Jump to content

Calculo de valores de inputs


Etiqueta

Recommended Posts

Boa tarde,

desenvolvi uma tabela com alguns inputs. O que pretendo é somar numa div os valores inseridos nessas inputs.

O que está a acontecer é que está a juntá-los em vez de somar.

Aqui fica parte do código php:

echo "<script type='text/javascript' src='JS/somaGlobal.js'></script>";

echo "<tr>";
 echo "<td colspan='5' align='center'>Total de Horas</td>";
 echo "<td><input name='tHNormais' type='text' id='tHNormais' placeholder='Soma' style='width: 104px;' onclick='SomaGlobal()'/></td>";
 echo "<td><input name='tHTurno' type='text' id='tHTurno' placeholder='Soma' style='width: 104px;' onclick='SomaGlobal()'/></td>";
 echo "<td><input name='tFeriados' type='text' id='tFeriados' placeholder='Soma' style='width: 104px;' onclick='SomaGlobal()'/></td>";
 echo "<td><input name='tFaltas' type='text' id='tFaltas' placeholder='Soma' style='width: 104px;' onclick='SomaGlobal()'/></td>";
echo "<tr>";

echo "<tr>";
 echo "<td colspan='5' align='right'>Total Global</td>";
 echo "<td><div id='totalGlobal'><input name='totalGlobal' type='text' id='totalGlobal' placeholder='Soma' style='width: 104px;'/></div></td>";//
echo "<tr>";

e o código em javascript:

function SomaGlobal()
{
var theForm = document.forms["f_criarRegistoH"];
   var tHNormais = theForm.elements["tHNormais"];
var tHTurno = theForm.elements["tHTurno"];
var tFeriados = theForm.elements["tFeriados"];
var tFaltas = theForm.elements["tFaltas"];
 var SomaG =0;


SomaG = tHNormais.value + tHTurno.value + tFeriados.value + tFaltas.value;
var divobj = document.getElementById('totalGlobal');
divobj.style.display='block';
divobj.innerHTML =SomaG;		 
}

function hideTotal()
{
   var divobj = document.getElementById('totalGlobal');
   divobj.style.display='none';
}

alguém me pode ajudar?

Obrigada

Link to comment
Share on other sites

o value dos elementos DOM que estás a manipular são textos, mesmo que esses textos contenham informação que poderá ser interprstada como números.

para fazer a adição corretamente, necessitas de dizer ao javascript para fazer essa interpretação

SomaG = parseFloat(tHNormais.value) + parseFloat(tHTurno.value) + parseFloat(tFeriados.value) + parseFloat(tFaltas.value);
IRC : sim, é algo que ainda existe >> #p@p
Link to comment
Share on other sites

quando clico na primeira input para inserir o valor que quero, aparece logo na div da soma isto "NaN"

já consegui assim:

SomaG = (tHNormais.value*1) + (tHTurno.value*1) + (tFeriados.value*1) + (tFaltas.value*1);

Obrigada pela ajuda

Edited by Etiqueta
Link to comment
Share on other sites

Aconselho-te a começares por não usar maneiras consideradas deprecated para manipular o DOM.

document.form está classificada como deprecated. Usa um dos getElement(s)By

Uma string vazia é um NaN. Tens que arranjar maneira de nunca teres uma string vazia nos inputs.

"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Link to comment
Share on other sites

Para isso precisas de tratar como texto e depois traduzes como precisares.

Podes sempre usar isto para coisas mais complicadas:

https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Date/

Ou então usares código teu. Podes tb separar a hora e os minutos para 2 variáveis usando o split.

"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Link to comment
Share on other sites

mais uma questão sobre este assunto

eu tenho este php para gerar campos dinamicamente consoantes as datas que foram geradas.

for ($contador = $_GET['diaInicio']; $contador <= $limite; $contador++) {

   $currentData = $_GET['anoInicio'] . '-' . $_GET['mesInicio'] . '-' . $contador;

    $mes = mesToString($_GET['mesInicio']);

    $fraseParaODia = diaSemanal($currentData);


    echo "<tr  style='text-align: center;'>";
    echo "<td style='width: 104px;'>";
    echo $contador .'-'. $mes;
    echo "</td>";
    echo "<td style='width: 104px;'>";
    echo $fraseParaODia;
    echo "</td>";



 $inicio = strip_tags(trim($_GET['HEntrada']));
 $fim   = strip_tags(trim($_GET['HSaida']));
 $intervalo   = strip_tags(trim($_GET['Intervalo']));


 //calcular horas normais
 $a = HorasDecimaisNormal();
 //calcular horas turno
 $b = HorasDecimaisTurno();

    echo "<td style='width: 104px;'><input name='HEntrada$contador' type='text' id='HEntrada' placeholder='Entrada' style='width: 104px; text-align: center;' value='$inicio'/></td>";
    echo "<td style='width: 104px;'><input name='Intervalo$contador' type='text' id='Intervalo' placeholder='Intervalo' style='width: 104px; text-align: center;' value='$intervalo'/></td>";
 echo "<td style='width: 104px;'><input name='HSaida$contador' type='text' id='HSaida' placeholder='Saída' style='width: 104px; text-align: center;'   value='$fim'/></td>";
    echo "<td style='width: 104px;'><input name='HoraNormal$contador' type='text' id='HoraNormal' placeholder='Normal' style='width: 104px; text-align: center;' onclick='SomatHNormais()' value='$a'/></td>";//<div id='HoraNormal$contador'></div>
    echo "<td style='width: 104px;'><input name='HoraTurno$contador' type='text' id='HoraTurno' placeholder='Turno' style='width: 104px; text-align: center;' value='$b'/></td>";
    echo "<td style='width: 104px;'><input name='NumHorasFeriado$contador' type='text' id='NumHorasFeriado' placeholder='Feriado' style='width: 104px; text-align: center;' /></td>";
    echo "<td style='width: 104px;'><input name='NumHorasFalta$contador' type='text' id='NumHorasFalta' placeholder='Faltas' style='width: 104px; text-align: center;'/></td>";

    echo "</tr>";

em que o campo HEntrada tem uma função do javascript "onclick='SomatHNormais()' "

aqui fica a função em javascript

function SomatHNormais()
{
var theForm = document.forms["f_criarRegistoH"];
   var HNormal = theForm.elements["HNormal"];
var limite = theForm.elements["limite"];
var SomaHN =0;
var divobj = document.getElementById('tHNormais');


  for (var contador = 0; contador <= limite; contador++)
  {

contador = HNormal.value*1;

  }


divobj.style.display='block';
divobj.innerHTML =SomaHN;				
}

no javascript vai fazer as contas e gerar o resultado para a div "tHNormais"o limite do m

Limite é o número limite do mês, ou seja, 28/29/30/31

no php criei essa div

echo "<td><div id='tHNormais' style='text-align: center;' ></div></td>";

o que pretendo é fazer a soma de todos os valores HNormais que são gerados dinamicamente e aparesentar o resultado na div.

podem ajudar-me?

Link to comment
Share on other sites

  • 3 weeks later...

mais uma questão sobre este assunto

eu tenho este php para gerar campos dinamicamente consoantes as datas que foram geradas.

for ($contador = $_GET['diaInicio']; $contador <= $limite; $contador++) {

      $currentData = $_GET['anoInicio'] . '-' . $_GET['mesInicio'] . '-' . $contador;

       $mes = mesToString($_GET['mesInicio']);

       $fraseParaODia = diaSemanal($currentData);


       echo "<tr  style='text-align: center;'>";
       echo "<td style='width: 104px;'>";
       echo $contador .'-'. $mes;
       echo "</td>";
       echo "<td style='width: 104px;'>";
       echo $fraseParaODia;
       echo "</td>";



    $inicio = strip_tags(trim($_GET['HEntrada']));
    $fim   = strip_tags(trim($_GET['HSaida']));
 $intervalo   = strip_tags(trim($_GET['Intervalo']));


 //calcular horas normais
 $a = HorasDecimaisNormal();
 //calcular horas turno
 $b = HorasDecimaisTurno();

       echo "<td style='width: 104px;'><input name='HEntrada$contador' type='text' id='HEntrada' placeholder='Entrada' style='width: 104px; text-align: center;' value='$inicio'/></td>";
       echo "<td style='width: 104px;'><input name='Intervalo$contador' type='text' id='Intervalo' placeholder='Intervalo' style='width: 104px; text-align: center;' value='$intervalo'/></td>";
 echo "<td style='width: 104px;'><input name='HSaida$contador' type='text' id='HSaida' placeholder='Saída' style='width: 104px; text-align: center;'   value='$fim'/></td>";
       echo "<td style='width: 104px;'><input name='HoraNormal$contador' type='text' id='HoraNormal' placeholder='Normal' style='width: 104px; text-align: center;' onclick='SomatHNormais()' value='$a'/></td>";//<div id='HoraNormal$contador'></div>
       echo "<td style='width: 104px;'><input name='HoraTurno$contador' type='text' id='HoraTurno' placeholder='Turno' style='width: 104px; text-align: center;' value='$b'/></td>";
       echo "<td style='width: 104px;'><input name='NumHorasFeriado$contador' type='text' id='NumHorasFeriado' placeholder='Feriado' style='width: 104px; text-align: center;' /></td>";
       echo "<td style='width: 104px;'><input name='NumHorasFalta$contador' type='text' id='NumHorasFalta' placeholder='Faltas' style='width: 104px; text-align: center;'/></td>";

       echo "</tr>";

em que o campo HEntrada tem uma função do javascript "onclick='SomatHNormais()' "

aqui fica a função em javascript

function SomatHNormais()
{
var theForm = document.forms["f_criarRegistoH"];
   var HNormal = theForm.elements["HNormal"];
var limite = theForm.elements["limite"];
var SomaHN =0;
var divobj = document.getElementById('tHNormais');


  for (var contador = 0; contador <= limite; contador++)
  {

contador = HNormal.value*1;

  }


divobj.style.display='block';
divobj.innerHTML =SomaHN;                
}

no javascript vai fazer as contas e gerar o resultado para a div "tHNormais"o limite do m

Limite é o número limite do mês, ou seja, 28/29/30/31

no php criei essa div

echo "<td><div id='tHNormais' style='text-align: center;' ></div></td>";

o que pretendo é fazer a soma de todos os valores HNormais que são gerados dinamicamente e aparesentar o resultado na div.

podem ajudar-me?

Será isto que queres fazer ????:

<html>

<form name="meu_form">
<input type="text" name="HNormal1" value="10"><br>
<input type="text" name="HNormal2" value="10"><br>
<input type="text" name="HNormal3" value="10"><br>
<input type="text" name="HNormal4" value="10"><br>
</form>
<div id="tHNormais" style="text-align:left;" ></div>

<script type="text/javascript">
var form = document.forms['meu_form'];
var value = 0;
for( var i=0; i < form.elements.length; i++ )
{
var element = form.elements.item(i);
var elementName = element.name.substring(0,7);
if( elementName == 'HNormal' )
{
value += parseInt(element.value);
}
}
document.getElementById('tHNormais').innerHTML = value;
</script>


</html>
Edited by brunoais
tags code + geshi
Link to comment
Share on other sites

@some

O teu código tem erros graves de sintaxe.

Faltam-lhe tags (head, body, etc...)

form não tem um @action.

Segues muito mal as regras de programação de js (usas regras do js 1.6, já vamos no 1.8.5 ou 1.8, dependendo do browser) devias de rever isso...

BTW, meti-lhe as tags code.

Edited by brunoais

"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

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
×
×
  • 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.