2010-05-27 4 views
1

OP, пожалуйста, замените этот текст подробным описанием проблемы. Ваш код ниже.Расчет суммы в JavaScript


Я использовал document.getElementById но математика не работает. Мне нужно тотально быть вычислен:

<!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

Я установил для них URL. –

+1

@DAFFODIL Пожалуйста, приложите больше усилий в свои вопросы. 1) Пожалуйста, отправьте код ** здесь **, а не на сторонний сайт. Этот вопрос будет совершенно бесполезен для других людей в течение месяца, когда код будет удален из dpaste. 2) Сосредоточьтесь на соответствующих частях кода. 3) Опишите проблему. «Работает nt» - это описание проблемы. – deceze

ответ

0

Вы не можете использовать document.getElementById («объявление») так, что будет возвращать вам только один элемент (который работает, если SQL-запрос возвращает только одну строку).

Вместо этого используйте document.getElementsByName («Сумма») (обратите внимание, что параметр чувствителен к регистру), так что вернет вам массив из нескольких элементов с именем Сумма, что вы можете перебрать и вычислить Всего.

Вам нужно будет изменить функцию Javascript a(). Смотри ниже.

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 много разработано. –

6

Вы, вероятно, получить строки объединяются вместе, поэтому получение 11 из 1 + 1. Попробуйте использовать parseInt(), чтобы преобразовать строку в число, следующим образом:

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

UPDATE: Как отметил CMS в другой ответ, вы также генерировать несколько элементов с одинаковым идентификатором, который является недействительным, и кроме этого getElementById() вернет только один элемент. Обратитесь к CMS' answer за один подход к решению этой проблемы. Обратите внимание: если вы добавляете десятичные числа вместе, вы не можете использовать parseInt(), как было предложено выше. Вы можете использовать parseFloat() или унарный оператор + для преобразования строки в номер. Тем не менее, вы должны быть careful with floating point arithmetic.

+0

Кажется, что OP должен суммировать денежные суммы, 'parseFloat' или унарный плюс оператор будет лучшим вариантом, чем' parseInt'. – CMS

+0

@CMS: Хорошая точка. +1 [ваш ответ] (http://stackoverflow.com/questions/2917928/calculating-the-total-in-javascript/2918041#2918041) для углубленного анализа. Я не заметил несколько входных элементов с одним и тем же идентификатором. Хороший улов. –

1

Я вижу, у вас есть:

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

Убедитесь, что Num является bieng вторит как значение.

если что не работает, и вы увидите, что значение вторит явно Num, попытайтесь заставить его с помощью:

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

var q = document.getElementById ('ad'). Value - 0; тоже будет работать. parseInt (string, radix) - это, вероятно, правильный способ сделать это. – Craig

3

Помимо вопроса преобразования типа, что и другие обратились, глядя на свой код, я вижу некоторые вопросы:

  1. Вы недействительные разметки, путем создания нескольких input элементов с одинаковыми идентификаторами (id="ad") в вашей петле.
  2. document.getElementById только возвращается элемент.

Я бы порекомендовал вам поставить class имя для идентификации input элементы, которые вы хотите просуммировать:

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

Тогда вы будете в состоянии сделать это следующим образом:

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; 
} 

Посмотрите пример here.

Смежные вопросы