【问题标题】:I want to calculate total amount when I change quantity我想在更改数量时计算总金额
【发布时间】:2017-04-19 20:51:27
【问题描述】:

我想在更改数量时获得总金额。

此脚本在 while 循环中不起作用:(数量 * 数量 = 总数量)

我该如何解决这个问题?请帮我解决这个问题。

function calculateTotal() {
   var totalAmt = document.addem.total.value;
   totalR = eval(totalAmt * document.addem.tb1.value);
		
   document.getElementById('total_amount').innerHTML = totalR;
}
<table>
    <tr>
        <td>Id</td>
        <td>Product</td>
        <td>Quantity</td>
        <td>Total</td>
    </tr>
    <tr>
        <?php
        $sq=mysql_query("select * from cart_sample where email='$ema'");
        while($row = mysql_fetch_array($sq))
        { ?>
            <td><?php echo $row['id']; ?></td>
            <td><?php echo $row['product']; ?></td>

            <form name="addem"  id="addem" />
                <td><input type="text" name="tb1" onkeyup="calculateTotal()" value="<?php echo $row['quantity']; ?>" /></td>
                <input type="hidden" name="total"  value="<?php echo $row['amount']; ?>" />
                <td><span id="total_amount"></span></td>
      <?php } ?>        </tr>
        </table>

【问题讨论】:

  • id 在同一个文档中应该是唯一的。
  • 我想做什么改变?
  • 我的朋友需要注意的一点:您在 while 循环之外打开 ,然后每次遇到渲染错误时关闭 和 HTML。还有一点:你为什么要使用这样的表单:
    ?您的表单组件必须在其中,您必须使用类似
    ... components...
  • 我刚刚更新了代码。但仍然无法正常工作

标签: php jquery ajax


【解决方案1】:

使用 jquery 只需在页面顶部添加脚本标签

<script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>

在页面底部&lt;/body&gt;之前

<script type="text/javascript">

    function calculateTotal() {

        var totalAmount = 0;
        $('#addem').find('input').each(function(){
            totalAmount += parseInt($(this).val()); //convert to integer so sum can be done correctly.
        });
        $('#total_amount').html(totalAmount);   
    }

</script>

【讨论】:

    【解决方案2】:

    由于您使用的是 jquery,因此您可以避免内联事件并为您的输入提供一个通用类,然后为所有输入创建一个事件:

    <input type="text" class='quantity' name="tb1" onkeyup="calculateTotal()" value="<?php echo $row['quantity']; ?>" />
    <input type="hidden" class='total' name="total"  value="<?php echo $row['amount']; ?>" />
    <span class="total_amount"></span>
    

    JS:

    $('.quantity').on('input', function(){
        var form = $(this).closest('form');
        var totalAmt = parseInt(form.find('.total').val());
        var quantity = parseInt($(this).val());
    
        form.find('.total_amount').text(totalAmt*quantity);
    })
    

    注意:表单应该在同一个td内。

    希望这会有所帮助。

    $('.quantity').on('input', function(){
      var form = $(this).closest('form');
      var totalAmt = parseInt(form.find('.total').val());
      var quantity = parseInt($(this).val());
    
      form.find('.total_amount').text(totalAmt*quantity);
    })
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <form>
      <input type="text" class='quantity' name="tb1" value="1" />
      <input type="hidden" class='total' name="total" value="10" />
      <span class="total_amount">10</span>
    </form>
    
    <form>
      <input type="text" class='quantity' name="tb1" value="2" />
      <input type="hidden" class='total' name="total" value="10" />
      <span class="total_amount">20</span>
    </form>
    
    <form>
      <input type="text" class='quantity' name="tb1" value="3" />
      <input type="hidden" class='total' name="total" value="10" />
      <span class="total_amount">30</span>
    </form>

    没有表格:

    $('.quantity').on('input', function(){
      var parent = $(this).closest('tr');
      var totalAmt = parseInt(parent.find('.total').val());
      var quantity = parseInt($(this).val());
    
      parent.find('.total_amount').text(totalAmt*quantity);
    
      calcul_total_quatities();
    })
    
    function calcul_total_quatities()
    {
      var total = 0;
      $('.total_amount').each(function(){
        total += parseInt( $(this).text() );
      })
      $('.total_all_amounts').text(total);
    
      post_data_to_server($('.total_amount').val(),total);
    }
    
    
    function post_data_to_server(total_amount,total_all_amounts)
    {
      $.ajax({
        type: 'post',
        url: 'your_page.php',
        data: {
          total_amount: total_amount,
          total_all_amounts: total_all_amounts
        },
        success: function( data ) {
          //'data' represent the message back from the PHP page
          
          console.log( data );
        }
      });
    }
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <table>
      <tr>
        <td>Id</td>
        <td>Product</td>
        <td>Quantity</td>
        <td>Total</td>
      </tr>
      <tr>
        <td>ID</td>
        <td>Product</td>
        <td>
          <input type="text" class='quantity' name="tb1" value="1" />
        </td>
        <td><input type="hidden" class='total' name="total" value="10" /></td>
        <td><span class="total_amount">10</span></td>
      </tr>
      <tr>
        <td>ID</td>
        <td>Product</td>
        <td>
          <input type="text" class='quantity' value="2" />
        </td>
        <td><input type="hidden" class='total' value="10" /></td>
        <td><span class="total_amount">20</span></td>
      </tr>
      <tr>
        <td>ID</td>
        <td>Product</td>
        <td>
          <input type="text" class='quantity' value="3" />
        </td>
        <td><input type="hidden" class='total' value="10" /></td>
        <td><span class="total_amount">30</span></td>
      </tr>
        <tr>
        <td></td>
        <td></td>
        <td></td>
        <td></td>
        <td><span class="total_all_amounts">60</span></td>
      </tr>
    </table>

    【讨论】:

    • 但我正在使用 php while 循环。
    • 它只有一种形式。
    • 我知道你有一个循环,有什么区别..循环将生成与我的示例相同的表单。
    • 我认为您的问题来自form 内表,您可以在我的注意中注意到。我建议根本不要使用forms,检查我的最后一个sn-p。
    • 你能帮我吗?如果我改变数量想同时获得小计(添加所有总金额,值 1+2+3)。这可能吗?请帮助我。跨度>
    猜你喜欢
    • 2023-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多