【问题标题】:Looping into a Table and getting values from different Inputs inside the Columns循环进入表并从列内的不同输入中获取值
【发布时间】:2017-07-26 15:55:28
【问题描述】:

我有一个动态表,它可以有未定义的行数,每一行都有定义的列数,在每一列内,总是相同的输入/控件,如下所示:

<table id='UndefinedTable'>
 <tr>
  <td><input type='text'></td> <!-- DataBase: Table Column1 -->
  <td><input type='text'></td> <!-- DataBase: Table Column2 -->
  <td><input type='date'></td> <!-- DataBase: Table Column3 -->
  <td><textarea></textarea></td> <!-- DataBase: Table Column4 -->
 </tr>
 <tr>
  <td><input type='text'></td> <!-- DataBase: Table Column1 -->
  <td><input type='text'></td> <!-- DataBase: Table Column2 -->
  <td><input type='date'></td> <!-- DataBase: Table Column3 -->
  <td><textarea></textarea></td> <!-- DataBase: Table Column4 -->
 </tr>
 <!-- This table may have an undefined number of rows -->
</table>

此外,行可以被擦除(我想出了一种循环进入它的方法,通过为每一行 tr1、tr2、tr3 赋予数字值,但正如我所说,任何行都可以被用户擦除,而且,一个非常肮脏的解决方案)。

我需要获取每个控件中的所有值/文本,并通过 ajax 将数据发送到 PHP 文件,以便插入每一行。

我一直在想一些方法来做到这一点,但问题是我不知道如何循环进入表格并获取 Inputs 和 TextArea 的值。

【问题讨论】:

  • 查看 jQuery "each"。

标签: javascript php jquery loops html-table


【解决方案1】:

如果您也想要纯 JavaScript 方法,您可以为每个输入动态赋予一个名称属性并循环遍历它们,将值放入数组或 JSon 对象中,然后使用 Ajax 传递给您的服务器。

var inputs = document.getElementsByName('input');
var values = [];
for (var i = 0; i < inputs.length; i++) {
    values.push(inputs[i].value);
}

要为您的文本框和文本区域命名,您可以使用:

.setAttribute('name', 'input');

【讨论】:

    【解决方案2】:

    通过 AJAX 提交

    var formDATA = {};
    $("#UndefinedTable tr").each(function(k){
        var obj = {};
        $(this).find("input,textarea").each(function(i){
            obj["field"+i] = $(this).val();
        });
        formDATA["row"+k] = obj;
    });
    
    //console.log(formDATA);
    

    如果您将属性name 添加到输入和文本区域,您可以更改此行:

    obj["field"+i] = $(this).val();
    

    与:

    obj[$(this)] = $(this).val();
    

    现在,您可以通过 $.ajax() 将formDATA 发送为data

    $.ajax({
        //...
        data : formDATA
        //...
    })
    

    提交喜欢的表格:

    首先你必须改变你的html,比如:

    <form id="form1" action="/post.php" method="post">
        <table id='UndefinedTable'>
            <tr>
                <td><input type='text'></td> <!-- DataBase: Table Column1 -->
                <td><input type='text'></td> <!-- DataBase: Table Column2 -->
                <td><input type='date'></td> <!-- DataBase: Table Column3 -->
                <td><textarea></textarea></td> <!-- DataBase: Table Column4 -->
            </tr>
            <tr>
                <td><input type='text'></td> <!-- DataBase: Table Column1 -->
                <td><input type='text'></td> <!-- DataBase: Table Column2 -->
                <td><input type='date'></td> <!-- DataBase: Table Column3 -->
                <td><textarea></textarea></td> <!-- DataBase: Table Column4 -->
            </tr>
            <!-- This table may have an undefined number of rows -->
        </table>
        <input value="send" type="submit">
    </form>
    

    现在是 JS:

    $("#form1").on("submit.block",function(e){
        e.preventDerault();
    });
    $("#UndefinedTable tr").each(function(k){
        $(this).find("input,textarea").each(function(i){
            $(this).attr("name","row"+k+"[field"+i+"]");
        });
    });
    $("#form1").off("submit.block");
    

    如果您将表单发布到 php 文件并使用 var_dump($_POST),则脚本会打印一个数组,例如:

    array (size=2)
      'row0' => 
        array (size=4)
          'field0' => string 'Field1' (length=6)
          'field1' => string 'field2' (length=6)
          'field2' => string '2015-01-14' (length=10)
          'field3' => string 'row1' (length=4)
      'row1' => 
        array (size=4)
          'field0' => string 'Field1' (length=6)
          'field1' => string 'field2' (length=6)
          'field2' => string '2015-01-23' (length=10)
          'field3' => string 'row2' (length=4)
    

    【讨论】:

      【解决方案3】:

      您可以使用

      选择所有这些元素
      $("#UndefinedTable input, #UndefinedTable textarea") //or this...
      $("#UndefinedTable").find("input, textarea") //...alternative version
      

      并循环遍历它们:

      $("#UndefinedTable input, #UndefinedTable textarea").each(function(){
         alert($(this).val());
      });
      

      【讨论】:

      • EDIT|类似:“对于每一行,每个输入和文本区域”怎么样?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-28
      • 1970-01-01
      • 2021-09-21
      • 2015-07-25
      • 1970-01-01
      相关资源
      最近更新 更多