Home > Enterprise >  Jquery: How multiplication of two fields by closest classname?
Jquery: How multiplication of two fields by closest classname?

Time:10-30

I have dynamic table where button on click add a new table row. On each row there is price, qty and total price input field. I want that when user put value on qty field, it will multiply price and qty and show on total price input.

My Code:

$(document).ready(function(){
var product = '
<tr>
   <td>
      <select name="product_id"  id="product-name">
         <option value="" selected disabled>Select Product</option>
         @foreach($product as $row) 
         <option value="{{$row->id}}">{{$row->product_name}}</option>
         @endforeach 
      </select>
   </td>
   <td><input type="number" name="p_price[]" ></td>
   <td><input type="number" name="p_qty[]"  ></td>
   <td><input type="number" name="p_total"  ></td>
   <td><button ><i  aria-hidden="true"></i></button></td>
</tr>
'; 
   $("#productAdd").click(function(){
      $('#product-table tbody').append(product);
   });
   $(document).on('click','.delete',function(){
      $(this).parents('tr').remove();
   });

   $(function() {
      $(document)
          .on('input', '.qty');
         $('.t_price').val($('.p_price').val() * $('.qty').val());
   });
   
});

How can I calculate each row value?

CodePudding user response:

You had the right idea

Note: Removed the ID
Delegate from tbody instead of document
Hide the first delete

$(function() {
  const $tb = $('#product-table tbody');
  $(".delete").eq(0).hide()
  $("#productAdd").on("click",function() {
    const $row = $tb.find("tr").eq(0).clone();
    $(".delete",$row).show(); // show the hidden delete on this row
    $row.find("select").val(""); // reset the select
    $row.find("[type=number]").val(0); // reset the numbers
    $tb.append($row);
  });
  $tb.on('click', '.delete', function() {
    $(this).parents('tr').remove();
  });
  $tb.on('input', '.qty', function() {
    const $row = $(this).closest("tr");
    $('.t_price',$row).val($('.p_price',$row).val() * $('.qty',$row).val());
  });
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<button id="productAdd">ADD</button>
<table id="product-table">
  <tbody>
    <tr>
      <td>
        <select name="product_id" >
          <option value="" selected disabled>Select Product</option>
          <option value="1">Product 1</option>
          <option value="2">Product 2</option>
          <option value="3">Product 3</option>
        </select>
      </td>
      <td><input type="number" name="p_price[]" ></td>
      <td><input type="number" name="p_qty[]" ></td>
      <td><input type="number" name="p_total" ></td>
      <td><button ><i  aria-hidden="true"></i></button></td>
    </tr>
  </tbody>
</table>

  • Related