как установить значение того же входного поля, но в другой строке, через ajax - PullRequest
0 голосов
/ 26 апреля 2020

У меня есть форма, я могу создать новую строку через jquery. Проблема, с которой я сталкиваюсь, состоит в том, что, когда я выбираю продукт из выпадающего списка, он должен установить скорость этого продукта в следующем столбце. Первый ряд делает это хорошо. Но когда я создаю новую строку и выбираю продукт, он дает правильное значение, но устанавливает значение в столбце первой строки. Я не знаю, как установить значение для соответствующего столбца. Снимок экрана

Как вы можете видеть на рисунке, я выбираю молочный продукт, он устанавливает значение в следующий столбец, когда я создал новую строку, и выбираю продукт, который он устанавливает значение в первой строке. столбец.

код функции, которая возвращает раскрывающиеся значения продукта

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;
}

код формы, созданной с помощью 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);
        });

код функции обмена, который устанавливает значение в цене за единицу

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); Я не знаю, как установить значение в одном столбце другой строки.

1 Ответ

0 голосов
/ 27 апреля 2020

Чтобы установить цену в соответствующей строке, необходимо передать второй параметр вашей функции product_id(), чтобы определить текущую строку. Это можно сделать как в следующем примере:

$(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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...