【问题标题】:Access text inputs in dynamic HTML table访问动态 HTML 表格中的文本输入
【发布时间】:2021-11-03 03:42:58
【问题描述】:

我正在尝试遵循Dynamically Add/Delete HTML Table Rows Using Javascript 的指南。我已将代码移植到我的需要,但我对如何从表中的嵌套 html 中获取我的数据感到困惑。理想情况下,我想将其作为数组导出到 Google Script。

我的测试涉及为表单填写一行,然后提交(运行函数 sendIT),但是当我尝试检查(带有警报)每个单独的单元格值时,我得到了这个:

<input type="text" name="tag[]" value=""> //i.e. no value?! 

我期待在那里找到输入的值并开始为每一列构建数组。

如何访问输入值?

非常感谢。

HTML 代码 + Google 脚本

<script type="text/javascript">
function addRows(){ 
    var table = document.getElementById('emptbl');
    var rowCount = table.rows.length;
    var cellCount = table.rows[0].cells.length; 
    var row = table.insertRow(rowCount);
    for(var i =0; i <= cellCount; i++){
        var cell = 'cell'+i;
        cell = row.insertCell(i);
        var copycel = document.getElementById('col'+i).innerHTML;
        cell.innerHTML=copycel;
    
    }
}
function deleteRows(){
    var table = document.getElementById('emptbl');
    var rowCount = table.rows.length;
    if(rowCount > '2'){
        var row = table.deleteRow(rowCount-1);
        rowCount--;
    }
    else{
        alert('There should be atleast one row');
    }
}
function sendIt(){
    var oTable = document.getElementById('emptbl');

    //gets rows of table
    var rowLength = oTable.rows.length;

    //loops through rows    
    for (i = 0; i < rowLength; i++){

      //gets cells of current row  
       var oCells = oTable.rows.item(i).cells;

       //gets amount of cells of current row
       var cellLength = oCells.length;

       //loops through each cell in current row
       for(var j = 0; j < cellLength; j++){

              // get your cell info here

              var cellVal = oCells.item(j).innerHTML;
              alert(cellVal);
              alert(cellVal.value)
           }
    }
  //alert("hello from sendit");
  google.script.run.appendRowFromTableSubmit(document.getElementById('emptbl'));
  alert("hello2");

}
</script>
</head>
<body>
<form action="#" method="post">    
    <table id="emptbl">
        <tr>
      <th>Tag</th>
            <th>Size</th>
            <th>Notes</th>
            <th>Species</th> 
            <th>Gender</th> 
        </tr> 
        <tr>
      <td id="col0"><input type="text" name="tag[]" value="" /></td> 
            <td id="col1"><input type="text" name="size[]" value="" /></td> 
            <td id="col2"><input type="text" name="notes[]" value="" /></td> 
            <td id="col3"> 
            <select name="species[]" id="species"> 
            <option value="0">Select Species</option> 
            <option value="1">Lobster</option>
            <option value="2">Brown</option>
            <option value="3">Velvet</option>
            </select> 
                </td> 
      <td id="col4"> <input type="text" name="gender[]" value="" /></td> 
        </tr>  
    </table> 
    <table> 
        <tr> 
            <td><input type="button" value="Add Row" onclick="addRows()" /></td> 
            <td><input type="button" value="Delete Row" onclick="deleteRows()" /></td> 
            <td><input type="submit" value="Submit1" onclick="sendIt()" /></td> 
        </tr>  
    </table> 
 </form> 
</body> 

    <div >
      
      <input type="button" value="Submit" onclick="submitForm();">
  </form>
  </div>
  </div>
  <div id="thanks" style="display: none;">
    <p>Thank you for sumbitting! The specimen data has now been populated, please fill in the specifics.</p>
  </div>
</body>

【问题讨论】:

    标签: html forms google-apps-script html-table


    【解决方案1】:

    编辑:

    您还可以包含一个 html 解析库来提供帮助。然后使用类似于您的 for each 循环访问每一行的项目。

           include('simple_html_dom.php');
    
           $html = str_get_html($string); // Parse the HTML, stored as a 
           //string in $string
           $rows = $html->find('tr'); // Find all rows in the table
    
           //Loop through each row
           foreach ($rows as $row) {
           //Loop through each child (cell) of the row
           foreach ($row->children() as $cell) {
           echo $cell->plaintext; // Display the contents of each                                  
           //cell - this is the value you want to extract
           }
           }
    

    祝你好运!

    你应该修改你的表单并给它一个名为 onSubmit 的属性。动态访问您的输入的唯一方法是提交它。否则页面无法知道提交的内容并且值不会被处理。对该值的任何引用都将与页面加载时一样为空。

     <form method="post" action onsubmit=myFunction('document.getelementbyid('param1')> 
        <fieldset>
        <label for="label 1">Label1</label>   
        <input type="text" name="someName" value="" id= "param1" />
        </fieldset>
        <input type ="submit" value="clickMe" name="submit"/>
        </form>
    

    【讨论】:

    • 您好,感谢您的解决方案。不幸的是,这在 Google Script 中不起作用,因为不支持 PHP。我最终找到了使用另一个动态行解决方案的解决方案(见下面的解决方案)。也许 innerHTML 是关键方法?
    • 不错的解决方案 :D 干得好。它是为你自己做的一个项目吗?在家工作?环境?
    • 我正在参与一项调查,评估受管理的海洋保护区的影响 :) doi.org/10.3389/fmars.2020.00076 如果您有兴趣,请点击此处。
    【解决方案2】:

    因为我无法在 google 脚本中使用 PHP,所以我最终找到了另一个动态行代码示例 (source),并且能够简单地进行 get 工作

    <html>
      <head>
        <script>
          function sendIt() {
            get_row(1);
          }
          function edit_row(no) {
            document.getElementById("edit_button" + no).style.display = "none";
            document.getElementById("save_button" + no).style.display = "block";
    
            var name = document.getElementById("name_row" + no);
            var country = document.getElementById("country_row" + no);
            var age = document.getElementById("age_row" + no);
    
            var name_data = name.innerHTML;
            var country_data = country.innerHTML;
            var age_data = age.innerHTML;
    
            name.innerHTML =
              "<input type='text' id='name_text" +
              no +
              "' value='" +
              name_data +
              "'>";
            country.innerHTML =
              "<input type='text' id='country_text" +
              no +
              "' value='" +
              country_data +
              "'>";
            age.innerHTML =
              "<input type='text' id='age_text" +
              no +
              "' value='" +
              age_data +
              "'>";
          }
    
          function save_row(no) {
            var name_val = document.getElementById("name_text" + no).value;
            var country_val = document.getElementById("country_text" + no).value;
            var age_val = document.getElementById("age_text" + no).value;
    
            document.getElementById("name_row" + no).innerHTML = name_val;
            document.getElementById("country_row" + no).innerHTML = country_val;
            document.getElementById("age_row" + no).innerHTML = age_val;
    
            document.getElementById("edit_button" + no).style.display = "block";
            document.getElementById("save_button" + no).style.display = "none";
          }
    
          function delete_row(no) {
            document.getElementById("row" + no + "").outerHTML = "";
          }
    
          function add_row() {
            var new_name = document.getElementById("new_name").value;
            var new_country = document.getElementById("new_country").value;
            var new_age = document.getElementById("new_age").value;
    
            var table = document.getElementById("data_table");
            var table_len = table.rows.length - 1;
            var row = (table.insertRow(table_len).outerHTML =
              "<tr id='row" +
              table_len +
              "'><td id='name_row" +
              table_len +
              "'>" +
              new_name +
              "</td><td id='country_row" +
              table_len +
              "'>" +
              new_country +
              "</td><td id='age_row" +
              table_len +
              "'>" +
              new_age +
              "</td><td><input type='button' id='edit_button" +
              table_len +
              "' value='Edit' class='edit' onclick='edit_row(" +
              table_len +
              ")'> <input type='button' id='save_button" +
              table_len +
              "' value='Save' class='save' onclick='save_row(" +
              table_len +
              ")'> <input type='button' value='Delete' class='delete' onclick='delete_row(" +
              table_len +
              ")'></td></tr>");
    
            document.getElementById("new_name").value = "";
            document.getElementById("new_country").value = "";
            document.getElementById("new_age").value = "";
          }
    
          function get_row(no) {
            alert(document.getElementById("name_row" + no).innerHTML);
          }
        </script>
      </head>
      <body>
        <div id="wrapper">
          <table
            align="center"
            cellspacing="2"
            cellpadding="5"
            id="data_table"
            border="1"
          >
            <tr>
              <th>Name</th>
              <th>Country</th>
              <th>Age</th>
            </tr>
    
            <tr id="row1">
              <td id="name_row1">Ankit</td>
              <td id="country_row1">India</td>
              <td id="age_row1">20</td>
              <td>
                <input
                  type="button"
                  id="edit_button1"
                  value="Edit"
                  class="edit"
                  onclick="edit_row('1')"
                />
                <input
                  type="button"
                  id="save_button1"
                  value="Save"
                  class="save"
                  onclick="save_row('1')"
                />
                <input
                  type="button"
                  value="Delete"
                  class="delete"
                  onclick="delete_row('1')"
                />
              </td>
            </tr>
    
            <tr id="row2">
              <td id="name_row2">Shawn</td>
              <td id="country_row2">Canada</td>
              <td id="age_row2">26</td>
              <td>
                <input
                  type="button"
                  id="edit_button2"
                  value="Edit"
                  class="edit"
                  onclick="edit_row('2')"
                />
                <input
                  type="button"
                  id="save_button2"
                  value="Save"
                  class="save"
                  onclick="save_row('2')"
                />
                <input
                  type="button"
                  value="Delete"
                  class="delete"
                  onclick="delete_row('2')"
                />
              </td>
            </tr>
    
            <tr id="row3">
              <td id="name_row3">Rahul</td>
              <td id="country_row3">India</td>
              <td id="age_row3">19</td>
              <td>
                <input
                  type="button"
                  id="edit_button3"
                  value="Edit"
                  class="edit"
                  onclick="edit_row('3')"
                />
                <input
                  type="button"
                  id="save_button3"
                  value="Save"
                  class="save"
                  onclick="save_row('3')"
                />
                <input
                  type="button"
                  value="Delete"
                  class="delete"
                  onclick="delete_row('3')"
                />
              </td>
            </tr>
    
            <tr>
              <td><input type="text" id="new_name" /></td>
              <td><input type="text" id="new_country" /></td>
              <td><input type="text" id="new_age" /></td>
              <td>
                <input
                  type="button"
                  class="add"
                  onclick="add_row();"
                  value="Add Row"
                />
              </td>
            </tr>
          </table>
          <input type="submit" onclick="sendIt();" value="submit" />
        </div>
      </body>
    </html>
    

    【讨论】:

      猜你喜欢
      • 2013-03-14
      • 2017-11-10
      • 2015-12-10
      • 2019-08-28
      • 2013-11-19
      • 1970-01-01
      • 1970-01-01
      • 2013-05-30
      • 2014-01-23
      相关资源
      最近更新 更多