[英]Calculating the total in JavaScript
OP,请用对您的问题的详细描述替换此文本。 您的代码如下。
我使用了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"> </td>
<td width="412"> </td>
</tr>
</table>
<table width="846" border="0">
<tr>
<td height="38"> </td>
</tr>
</table>
<table width="846" border="0">
<tr>
<td width="390" rowspan="4"> </td>
<td width="92" height="35"> </td>
<td width="136"><?php echo $No;?></td>
<td width="36"> </td>
<td width="170"><?php echo $Date;?></td>
</tr>
<tr>
<td height="37"> </td>
<td><?php echo $DCNo;?></td>
<td> </td>
<td><?php echo $DcDate;?></td>
</tr>
<tr>
<td height="34"> </td>
<td><?php echo $YourOrderNo;?></td>
<td> </td>
<td><?php echo $OrderDate;?></td>
</tr>
<tr>
<td height="29"> </td>
<td><?php echo $VendorCode;?></td>
<td> </td>
<td> </td>
</tr>
</table>
<table width="845" border="0">
<tr>
<td height="38"> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
</tr>
<tr>
<td width="34"> </td>
<td width="457"> </td>
<td width="104"> </td>
<td width="79"> </td>
<td width="149"> </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">
<input type="text" name="textfield2" /> </td>
<td width="191"> </td>
<td width="144"><input type="text" name="tot" id="s" onclick="a()"; /></td>
</tr>
您可能正在将字符串串联在一起,因此从1 + 1
获得11
。 尝试使用parseInt()
将字符串转换为数字,如下所示:
var q = parseInt(document.getElementById('ad').value, 10);
document.getElementById('s').value = q + q;
更新:正如CMS在另一个答案中指出的那样,您还将生成具有相同ID的多个元素,这是无效的,并且除了getElementById()
之外,该元素将仅返回一个元素。 请查看CMS的答案 ,以找到解决此问题的一种方法。
另外,请注意,如果将十进制数字加在一起,则不能如上所述使用parseInt()
。 您可以使用parseFloat()
或一元+
运算符将字符串转换为数字。 但是,您必须谨慎使用浮点算法 。
除了其他人已经解决的类型转换问题之外,通过查看您的代码,我看到了一些问题:
id="ad"
)的input
元素,您正在生成无效的标记。 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;
}
在此处查看示例。
我看到你有:
id ="ad" value="<?php echo $Amount;?>"
确保将num作为数值回显。
如果那不起作用,并且您看到echoed值显然是一个数字,请尝试使用以下方式强制使用它:
var q = document.getElementById('ad').value * 1;
您不能使用document.getElementById('ad'),因为那样只会返回一个元素(如果SQL查询仅返回一行,则该元素有效)。
而是使用document.getElementsByName('Amount') (请注意该参数区分大小写),因为这将返回一个数组,其中包含多个名称为Amount的元素,您可以对其进行迭代并计算总数。
您需要更改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;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.