Javascript 为什么不是';t总计输入中设置的行的计算值?

Javascript 为什么不是';t总计输入中设置的行的计算值?,javascript,php,Javascript,Php,我有一段代码无法计算数量*价格-折扣=总数 数量值从数据库中检索。为什么不在该行的相应总计输入上设置计算的总计 <?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 wh

我有一段代码无法计算数量*价格-折扣=总数

数量值从数据库中检索。为什么不在该行的相应总计输入上设置计算的总计

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

我看到您在脚本中使用了row参数,并对其进行了注释。就在函数calc声明之后

要将计算出的总计放入行的最终输入中,只需进行几项更改:

  • 删除第一行上的(即
    /
    ):

    function calc(id) {
        //var row = id.parentNode.parentNode;
        ^
    
    (这可能是试图用其他方式定义行的结果)

  • row变量中单元格的索引被关闭1。这是因为

    JavaScript数组的索引为零:数组的第一个元素位于索引0处,最后一个元素位于等于数组长度属性值减去1的索引处。

    例如,要获取quant的值,请更新此行:

    var quant = row.cells[4].getElementsByTagName('input')[0].value;
    
    为此:

    var quant = row.cells[3].getElementsByTagName('input')[0].value;
    
    同样,对于price和disc的值,以及更新总数(即,
    row.cells[6]。getElementsByTagName('input')[0]。value=res;

请参见以下示例中应用的这些更改:

函数计算(id){
var row=id.parentNode.parentNode;
var quant=row.cells[3]。getElementsByTagName('input')[0]。值;
var price=row.cells[4]。getElementsByTagName('input')[0]。值;
var disc=row.cells[5]。getElementsByTagName('input')[0]。值;
如果(disc==null | | disc==''){
res=parseFloat(数量)*parseFloat(价格);
}否则{
var res=(parseFloat(quant)*parseFloat(price))-(parseFloat(quant)*parseFloat(price)*(parseFloat(disc)/100));
}
行。单元格[6]。getElementsByTagName('input')[0]。value=res;
}

代码
名称
量
价格
优惠
全部的

wooooow这很好用,上帝保佑你@Sam Onela