Fahad Munir
Fahad Munir

Reputation: 29

how to set the value of same input filed but in different row through ajax

I have a form I can create a new row through jquery. The problem I'm facing is that when I select the product from dropdown it have to set the rate of this product to its next column. The first row does it fine. But when i create the new row and select the product it gives the correct value but sets value on first row's column. I don't know how to set value to corresponding column. Screenshot

As you can see in the picture I select the milk product, it sets the value to next column when I created the new row and select the product it sets value to the first row's column.

code of function which returns the dropdown values of product

function fill_unit_select_box($con)
{
    $output = '';
    $query = "SELECT * FROM `stock` INNER JOIN product ON stock.product_id = product.product_id
              WHERE stock.product_id = product.product_id ORDER BY product_name ASC";
    $query1=mysqli_query($con,$query);

    while($row=mysqli_fetch_array($query1))
    {
        $output .= '<option value="'.$row["product_id"].'">'.$row["product_name"].'</option>';
    }
    return $output;
}

code of form created through jquery

$(document).on('click', '.add', function(){
            var html = '';
            html += '<tr>';
            html += '<td><select name="item_name[]" onchange="product_id(this)" class="form-control item_name"><option value="">Select Unit</option><?php echo fill_unit_select_box($con); ?></select></td>';
            html += '<td><input type="text" disabled name="item_per_unit_price[]" id="product_price" class="form-control item_per_unit_price input" /></td>';
            html += '<td><input type="text" name="item_quentity[]"  class="form-control item_quentity input" /></td>';
            /*html += '<td><input type="text" name="item_total_price[]"  class="form-control item_total_price" /></td>';*/
            html += '<td><button type="button" name="remove" class="btn btn-danger btn-sm remove"><span class="glyphicon glyphicon-minus"></span></button></td></tr>';
            $('#item_table').append(html);
        });

code of onchange function which sets the value in price per unit

function product_id(str) {
        var id = str.value;
        $.ajax({
            type : "POST",
            url : "stock.php?page=stock_per_unit_price",
            data : {
                id:id
            },
          success: function (data) {
                console.log(data);
                $("#product_price").val(data);

            }
        });
    }

$("#product_price").val(data); I don't know how to set value on same column of different row.

Upvotes: 1

Views: 411

Answers (1)

matthias_h
matthias_h

Reputation: 11416

To set the price in the corresponding row, it's necessary to pass a second parameter to your product_id() function to identify the current row. This could be done like in the following example:

$(document).ready(function() {
  $(document).on("change", "select", function() {
    let value = $(this).val();
    let row = $(this).closest("tr").index();
    product_id(value, row);
  });
  function product_id(value, row) {
    for (var k in dataset) {
      if (value == k) {
         let price = dataset[k];
         $("tr:eq(" + row + ")").find(".product_price").val(price)
      }
    }  
  }
  dataset = {"1" : "10 €", "2" : "20 €"}
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<table>
<tr>
  <td><select>
  <option value="">Select Unit</option>
  <option value="1">1</option>
  <option value="2">2</option>
  </select></td>
  <td><input class="product_price"/></td>
</tr>
<tr>
  <td><select>
  <option value="">Select Unit</option>
  <option value="1">1</option>
  <option value="2">2</option>
  </select></td>
  <td><input class="product_price"/></td>
</tr>
</table>

Upvotes: 1

Related Questions