我有这个代码不能计算数量*价格 - 折扣=总计,
从数据库中检索数量值。为什么计算的总数不是在行的适当总输入上设置的?
<?php
$con = mysqli_connect('localhost', 'root', '', 'a.karat');
if(isset($_POST['product_id']))
{
$prno=$_POST['prno'];
$i=1;
$sql = mysqli_query($con,"select * from detail_pr where prNo='$prno'");
while ($r = mysqli_fetch_array($sql)) {
echo
'<tr>
<td><input type="checkbox" name="check[]" id="check'.$i.'" value="'.$i.'"></td>
<td><label for="productCode"></label>
<input type="text" name="productCode'.$i.'" id="productCode'.$i.'" readonly value="'.$r["productCode"].'" size="12" ></td>
<td><label for="productName"></label>
<input type="text" name="productName'.$i.'" id="productName'.$i.'" readonly value="'.$r["productName"].'"size="35" ></td>
<td><label for="qty"></label>
<input type="number" onkeyup="calc(this);" name="qty'.$i.'" id="qty'.$i.'" readonly value="'.$r["qty"].'" size="8" ></td>
<td><input type="number" onkeyup="calc(this);" name="price'.$i.'" id="price'.$i.'" size="10" min="1" max="99" onchange="calc(this);" ></td>
<td><input type="number" onkeyup="calc(this);" name="discount'.$i.'" id="discount'.$i.'" size="10" min="0" max="99" onchange="calc(this);"></td>
<td><input type="number" name="total'.$i.'" id="total'.$i.'" size="10" min="1" max="99" onchange="calc(this);" ></td>
</tr>';
$i++;
}
}
?>
<script>
function calc(id) {
//var row=id.parentNode.parentNode;
var quant=row.cells[4].getElementsByTagName('input')[0].value;
var price=row.cells[5].getElementsByTagName('input')[0].value;
var disc=row.cells[6].getElementsByTagName('input')[0].value;
if(disc==null || disc=='') {
res=parseFloat(quant)*parseFloat(price);
} else {
var res=(parseFloat(quant)*parseFloat(price))- (parseFloat(quant)*parseFloat(price)*(parseFloat(disc)/100));
}
row.cells[7].getElementsByTagName('input')[0].value=res;
}
</script>
答案 0 :(得分:0)
我看到您在脚本中使用了row参数,并且已对其进行了注释。就在函数calc声明之后。
答案 1 :(得分:0)
只有一些更改才能将计算出的总数放在行的最终输入中:
删除第一行的single-line comment operator(即//
):
function calc(id) {
//var row = id.parentNode.parentNode;
^
(也许这是尝试以其他方式定义行的遗留问题。)
行变量中的单元格索引为1。这是因为
JavaScript数组是零索引的:数组的第一个元素在索引0处,最后一个元素在索引处等于数组的长度属性减去1的值。 1
因此,例如,要获取 quant 的值,请更新以下行:
var quant = row.cells[4].getElementsByTagName('input')[0].value;
到此:
var quant = row.cells[3].getElementsByTagName('input')[0].value;
,类似于 price 和光盘的值,以及更新总数(即row.cells[6].getElementsByTagName('input')[0].value = res;
)
请参阅以下示例中应用的这些更改:
function calc(id) {
var row = id.parentNode.parentNode;
var quant = row.cells[3].getElementsByTagName('input')[0].value;
var price = row.cells[4].getElementsByTagName('input')[0].value;
var disc = row.cells[5].getElementsByTagName('input')[0].value;
if (disc == null || disc == '') {
res = parseFloat(quant) * parseFloat(price);
} else {
var res = (parseFloat(quant) * parseFloat(price)) - (parseFloat(quant) * parseFloat(price) * (parseFloat(disc) / 100));
}
row.cells[6].getElementsByTagName('input')[0].value = res;
}
&#13;
<table>
<tr>
<td></td>
<!--checkbox-->
<td>Code</td>
<td>Name</td>
<td>Quantity</td>
<td>Price</td>
<td>Discount</td>
<td>Total</td>
</tr>
<tr>
<td>
<input type="checkbox" name="check[]" id="check1" value="1">
</td>
<td>
<label for="productCode"></label>
<input type="text" name="productCode1" id="productCode1" readonly value="29" size="12">
</td>
<td>
<label for="productName"></label>
<input type="text" name="productName1" id="productName1" readonly value="wheel" size="35">
</td>
<td>
<label for="qty"></label>
<input type="number" onkeyup="calc(this);" name="qty1" id="qty1" readonly value="2" size="8">
</td>
<td>
<input type="number" onkeyup="calc(this);" name="price1" id="price1" size="10" min="1" max="99" onchange="calc(this);">
</td>
<td>
<input type="number" onkeyup="calc(this);" name="discount1" id="discount1" size="10" min="0" max="99" onchange="calc(this);">
</td>
<td>
<input type="number" name="total1" id="total1" size="10" min="1" max="99" onchange="calc(this);">
</td>
</tr>
</table>
&#13;