使用jquery向表中添加行,但未使用php提交新行

Posted

技术标签:

【中文标题】使用jquery向表中添加行,但未使用php提交新行【英文标题】:Adding rows to table with jquery, but new rows not submitted to form with php 【发布时间】:2022-01-01 11:48:43 【问题描述】:

我对此很接近,我知道,向表中添加新行的 jquery 运行良好,但是当提交表单时,我只从第一行获取输入值(每行都有一些输入) .我无法弄清楚为什么其余的行,无论存在多少行,都没有在数组中被拾取。

Js:

//add rows
$("#addrow").click(function()
    i=1;
    var row = '<tr>'
    + '<td><input type="checkbox" name="record[]" style="margin:0 10px 0 -15px"></td>'
    + '<td><input class="form-control" type="number" name="partid[]" id="pid'+i+'"></td>'
    + '<td><input class="form-control" type="number" min="1" step="1" name="partqty[]" id="pqty'+i+'" placeholder="Qty"></td>'
    + '<td><input class="form-control" type="number" min="0.0001" step="0.0001" name="partlength[]" id="pqty'+i+'" placeholder="Length"></td>'
    + '</tr>';
    i++;
    $("#partstable").append(row);
);

形式:

<input type="button" class="btn btn-dark" id="addrow" value="Add Row">
            <table id="partstable" style="padding:15px;margin:15px;">
            <thead>
            <tr>
            <th></th>
            <th></th>
            <th>Qty</th>
            <th>Length</th>
            </tr>
            </thead>
            <tbody>
            <form action="index.php" method="post">
            <tr>
                <td><input type="checkbox" name="record[]" style="margin:0 10px 0 -15px"></td>
                <td><input class="form-control" type="number" name="partid[]" id="pid[]"></td>
                <td><input class="form-control" type="number" min="1" step="1" name="partqty[]" id="pqty[]" placeholder="Qty"></td>
                <td><input class="form-control" type="number" min="0.0001" step="0.0001" name="partlength[]" id="pqty[]" placeholder="Length"></td>
            </tr>
            </tbody>
            </table>
            <button type="button" class="btn btn-dark delete-row">Delete Row</button>
            
            <input name="submit" class="btn btn-success" type="submit" value="Submit">
            </form>

我希望看到所有行,无论下面数组中可用的数量如何,但无论我尝试什么,我都只会得到第一行...

            <?php
        if(isset($_POST['submit']))
            foreach($_POST['partid'] as $partid)
               $partid = $_POST['partid'];
               print_r($partid);
               $partqty = $_POST['partqty'];
               print_r($partqty);
               $partlength = $_POST['partlength'];
               print_r($partlength);
            
        
        ?>

【问题讨论】:

您的 html 无效。 &lt;tbody&gt; 内不能有 &lt;form&gt; &lt;form&gt; 需要包裹整个&lt;table&gt; @ohgodpleasehelpme 你愿意接受任何人的帮助,还是只接受上帝的帮助? 谢谢@Barmar 我认为您的问题也出在您的 PHP 代码中,您在循环中覆盖了 foreach $partid 的变量,这就是为什么您看不到其他值的原因,请更改$partid 不覆盖变量。 【参考方案1】:

您的问题在于您的 PHP 代码,您只需像这样在 PHP 代码中循环数据:

<?php

    foreach($_POST['partid'] as $key => $val)
        $partid = $val;
        $partqty = $_POST['partqty'][$key];
        $partlength = $_POST['partlength'][$key];


        echo $partid." ".$partqty." ".$partlength."</br>";
    

?>

您只需要循环partid 数组并使用该数组的键和foreach,然后选择每个变量的键。

也正如@Barmar 提到的那样修复form 标签位置:

<form action="index.php" method="post">
    <input type="button" class="btn btn-dark" id="addrow" value="Add Row">
    <table id="partstable" style="padding:15px;margin:15px;">
        <thead>
            <tr>
                <th></th>
                <th></th>
                <th>Qty</th>
                <th>Length</th>
            </tr>
        </thead>
        <tbody>            
            <tr>
                <td><input type="checkbox" name="record[]" style="margin:0 10px 0 -15px"></td>
                <td><input class="form-control" type="number" name="partid[]" id="pid[]"></td>
                <td><input class="form-control" type="number" min="1" step="1" name="partqty[]" id="pqty[]" placeholder="Qty"></td>
                <td><input class="form-control" type="number" min="0.0001" step="0.0001" name="partlength[]" id="pqty[]" placeholder="Length"></td>
            </tr>
        </tbody>
    </table>
    <button type="button" class="btn btn-dark delete-row">Delete Row</button>
    <input name="submit" class="btn btn-success" type="submit" value="Submit">
</form>

【讨论】:

非常感谢我的朋友,现在 php 也已更正,一切正常!【参考方案2】:

考虑以下内容。

$(function() 
  //add rows
  $("#addrow").click(function() 
    var i = $("#partstable tbody tr").length + 1;
    var row = $("<tr>");
    $("<td>").appendTo(row);
    $("<input>", 
      type: "checkbox",
      name: "record[]"
    ).appendTo($("td:last", row));
    $("<td>").appendTo(row);
    $("<input>", 
      type: "number",
      name: "partid[]",
      id: "pid" + i,
      class: "form-control"
    ).appendTo($("td:last", row));
    $("<td>").appendTo(row);
    $("<input>", 
      type: "number",
      min: 1,
      step: 1,
      name: "partqty[]",
      id: "pqty" + i,
      placeholder: "Qty",
      class: "form-control"
    ).appendTo($("td:last", row));
    $("<td>").appendTo(row);
    $("<input>", 
      type: "number",
      min: 0.0001,
      step: 0.0001,
      name: "partlength[]",
      id: "plength" + i,
      placeholder: "Length",
      class: "form-control"
    ).appendTo($("td:last", row));
    $("#partstable").append(row);
  );

  $("form").submit(function(event) 
    event.preventDefault();
    console.log($(this).serialize());
  );
)
#partstable tbody tr td>input[type='checkbox'] 
  margin: 0 10px 0 -15px;
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous">
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input type="button" class="btn btn-dark" id="addrow" value="Add Row">
<form action="index.php" method="post">
  <table id="partstable" style="padding:15px;margin:15px;">
    <thead>
      <tr>
        <th></th>
        <th></th>
        <th>Qty</th>
        <th>Length</th>
      </tr>
    </thead>
    <tbody>
      <tr>
        <td><input type="checkbox" name="record[]"></td>
        <td><input class="form-control" type="number" name="partid[]" id="pid1"></td>
        <td><input class="form-control" type="number" min="1" step="1" name="partqty[]" id="pqty1" placeholder="Qty"></td>
        <td><input class="form-control" type="number" min="0.0001" step="0.0001" name="partlength[]" id="plength1" placeholder="Length"></td>
      </tr>
    </tbody>
  </table>
  <button type="button" class="btn btn-dark delete-row">Delete Row</button>
  <input name="submit" class="btn btn-success" type="submit" value="Submit">
</form>

有更多代码,但它使用唯一 ID 正确构建所有部分。

【讨论】:

以上是关于使用jquery向表中添加行,但未使用php提交新行的主要内容,如果未能解决你的问题,请参考以下文章

Jquery - 向表中添加新行(IE 友好版本)

使用 JavaScript 向表中添加新行时重置输入字段

使用 vue.js 动态向表中添加行

向表中添加新列

Python PyQt5 - 向表中添加行

向表中添加了列,但链接图表未使用新列数据更新