为什么不计算输入中为行设置的行的值?

时间:2017-03-20 17:11:24

标签: 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 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>

2 个答案:

答案 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;

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

&#13;
&#13;
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;
&#13;
&#13;

1 <子> https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array#Accessing_array_elements