2010-05-27 5 views
1

OP, veuillez remplacer ce texte par une description détaillée de votre problème. Votre code est ci-dessous.Calcul du total en JavaScript


J'utilisé document.getElementById mais le calcul ne fonctionne pas. Je dois tout à calculer:

<!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=iso-8859-1" /> 
<title></title> 
<script type = "text/javascript"> 
function a() 
{ 

var q = document.getElementById('ad').value; 
document.getElementById('s').value=q + q; 
} 

</script> 
</head> 
<?php 
$con = mysql_connect("localhost","root",""); 
if (!$con) 
    { 
    die('Could not connect: ' . mysql_error()); 
    } 

mysql_select_db("form1", $con); 


error_reporting(E_ALL^E_NOTICE); 
$nam=$_GET['msg']; 

$row=mysql_query("select * from inv where Name='$nam'"); 
while($row1=mysql_fetch_array($row)) 
{ 
$Name=$row1['Name']; 
    $Address =$row1['Address']; 
    $City=$row1['City']; 
    $Pincode=$row1['Pincode']; 
    $No=$row1['No']; 
    $Date=$row1['Date']; 
    $DCNo=$row1['DCNo']; 
    $DcDate=$row1['DcDate']; 
    $YourOrderNo=$row1['YourOrderNo']; 
    $OrderDate=$row1['OrderDate']; 
    $VendorCode=$row1['VendorCode']; 
    $SNo=$row1['SNo']; 
    $descofgoods=$row1['descofgoods']; 
    $Qty=$row1['Qty']; 
    $Rate=$row1['Rate']; 
    $Amount=$row1['Amount']; 
} 

?> 
<body> 
<form id="form1" name="form1" method="post" action=""> 
    <table width="846" border="0"> 
    <tr> 
     <td width="411" height="113">&nbsp;</td> 
     <td width="412">&nbsp;</td> 
    </tr> 
    </table> 
    <table width="846" border="0"> 
    <tr> 
     <td height="38">&nbsp;</td> 
    </tr> 
    </table> 
    <table width="846" border="0"> 

    <tr> 
     <td width="390" rowspan="4">&nbsp;</td> 
     <td width="92" height="35">&nbsp;</td> 
     <td width="136"><?php echo $No;?></td> 
     <td width="36">&nbsp;</td> 
     <td width="170"><?php echo $Date;?></td> 
    </tr> 
    <tr> 
     <td height="37">&nbsp;</td> 
     <td><?php echo $DCNo;?></td> 
     <td>&nbsp;</td> 
     <td><?php echo $DcDate;?></td> 
    </tr> 
    <tr> 
     <td height="34">&nbsp;</td> 
     <td><?php echo $YourOrderNo;?></td> 
     <td>&nbsp;</td> 
     <td><?php echo $OrderDate;?></td> 
    </tr> 
    <tr> 
     <td height="29">&nbsp;</td> 
     <td><?php echo $VendorCode;?></td> 
     <td>&nbsp;</td> 
     <td>&nbsp;</td> 
    </tr> 
    </table> 
    <table width="845" border="0"> 
    <tr> 
     <td height="38">&nbsp;</td> 
     <td>&nbsp;</td> 
     <td>&nbsp;</td> 
     <td>&nbsp;</td> 
     <td>&nbsp;</td> 
    </tr> 
    <tr> 
     <td width="34">&nbsp;</td> 
     <td width="457">&nbsp;</td> 
     <td width="104">&nbsp;</td> 
     <td width="79">&nbsp;</td> 
     <td width="149">&nbsp;</td> 
    </tr> 
     <?php $i=1; 
    $row=mysql_query("select * from inv where Name='$nam'"); 
while($row1=mysql_fetch_array($row)) 
{ 
$descofgoods=$row1['descofgoods']; 
    $Qty=$row1['Qty']; 
    $Rate=$row1['Rate']; 
    $Amount=$row1['Amount']; 
?> 
      <tr> 
       <td><?php echo $i;?></td> 
       <td><?php echo $descofgoods;?></td> 
       <td><?php echo $Qty;?></td> 
       <td><?php echo $Rate;?></td> 
       <td><input name="Amount" type = "text" id ="ad" value="<?php echo $Amount;?>" /></td> 
      </tr> 


    <?php $i++;} ?> 
    </table> 
    <table width="844" border="0"> 
    <tr> 
     <td width="495" height="1065">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
     <input type="text" name="textfield2" />  &nbsp; &nbsp; &nbsp; &nbsp; </td> 
     <td width="191">&nbsp;</td> 
     <td width="144"><input type="text" name="tot" id="s" onclick="a()"; /></td> 
    </tr> 
+0

J'ai corrigé l'URL pour eux. –

+1

@DAFFODIL S'il vous plaît mettre plus d'effort dans vos questions. 1) Veuillez poster le code ** ici **, pas sur un site tiers. Cette question sera complètement sans valeur pour les autres personnes dans un mois lorsque le code sera supprimé de dpaste. 2) Concentrez-vous sur les parties pertinentes du code. 3) Décrivez le problème. "Est-ce que ça marche" n'est pas une description du problème. – deceze

Répondre

0

Vous ne pouvez pas utiliser document.getElementById (« ad ») depuis ne vous retournerait qu'un seul élément (qui fonctionne si une seule ligne est renvoyée par la requête SQL).

Au lieu d'utiliser document.getElementsByName (« Montant ») (notez que le paramètre est sensible à la casse) car qui vous renvoie un tableau de plusieurs éléments avec le nom Montant que vous pouvez parcourir et calculer la total.

Vous devez changer votre fonction Javascript a(). voir ci-dessous.

function a() 
{ 
    var q = document.getElementsByName('Amount'); 
    var count = 0; 
    for (i = 0; i < q.length; i++) 
     count += parseInt(q[i].value,10); 
    document.getElementById('s').value = count; 
} 
+0

Thnx beaucoup travaillé. –

6

vous obtenez probablement les chaînes concaténées ensemble, obtenant donc 11 de 1 + 1. Essayez d'utiliser parseInt() pour convertir la chaîne en nombre, comme suit:

var q = parseInt(document.getElementById('ad').value, 10); 
document.getElementById('s').value = q + q; 

MISE À JOUR: Comme CMS a noté dans une autre réponse, vous générez également plusieurs éléments avec le même ID, qui est invalide, et en dehors de cela getElementById() retournera seulement un élément. Découvrez CMS' answer pour une approche pour s'attaquer à ce problème.

En outre, notez que si vous ajoutez des nombres décimaux ensemble, vous ne pouvez pas utiliser parseInt() comme suggéré ci-dessus. Vous pouvez utiliser parseFloat() ou l'opérateur unaire + pour convertir la chaîne en nombre. Néanmoins, vous devez être careful with floating point arithmetic.

+0

Il semble que l'OP doit additionner des montants monétaires, 'parseFloat' ou l'opérateur unary plus serait une meilleure option que' parseInt'. – CMS

+0

@CMS: Bon point. +1 [votre réponse] (http://stackoverflow.com/questions/2917928/calculating-the-total-in-javascript/2918041#2918041) pour l'analyse approfondie. Je n'ai pas remarqué les multiples éléments d'entrée avec le même identifiant. Bonne prise. –

1

Je vois que vous avez:

id ="ad" value="<?php echo $Amount;?>" 

Assurez-vous qu'un num est Bieng écho en tant que valeur.

si cela ne fonctionne pas et que vous voyez que la valeur est clairement un écho num, essayez de forcer en utilisant:

var q = document.getElementById('ad').value * 1; 
+4

var q = document.getElementById ('ad'). Valeur - 0; travaillerait aussi. parseInt (string, radix) est probablement la bonne façon de le faire. – Craig

3

Outre la question de la conversion de type que les autres ont abordé, en regardant votre code, je vois sont des problèmes:

  1. Vous générez un balisage non valide, en créant plusieurs input éléments avec le même identifiant (id="ad") dans votre boucle.
  2. document.getElementById renvoie uniquement un élément.

Je vous recommande de mettre un nom class pour identifier les input éléments que vous voulez résumer:

... 
<td> 
    <input class="amount" type="text" value="<?php echo $Amount;?>" /> 
</td> 
... 

Ensuite, vous serez en mesure de le faire par ceci:

function getTotal() { 
    var inputs = document.getElementsByTagName('input'), 
     el, total = 0; 

    for (var i = 0, n = inputs.length; i < n; i++) { 
    el = inputs[i]; 
    if (el.className == "amount") { 
     total += +el.value; // using the unary plus operator to convert to Number 
    } 
    } 

    document.getElementById('s').value = total; 
} 

Vérifiez un exemple here.