【问题标题】:Insert a new row of input tags using JavaScript使用 JavaScript 插入新的一行输入标签
【发布时间】:2016-03-09 13:13:21
【问题描述】:

我想在<td> 元素中添加一行新的 5 个输入标签,它是<tr class="unit"> 的子元素,也是<table id="myTable"> 元素的孙子元素。

在我的 Javascript 代码中,我能够对 5 个输入标签进行控制台记录,但无法将它们附加到 <td> 元素和其余父元素。

我的代码是否在正确的轨道上解决这个问题?

这是我正在做的事情的链接http://codepen.io/johnnyginbound/pen/xZxZNo?editors=101

function addRow(){
  var parentTable = document.getElementById('myTable');
  var tableRow = document.getElementsByTagName('tr')[0].children;
  var unitTables = document.getElementsByClassName('unit-table')[0];
  var newInputType = document.createElement('input');
  newInputType.setAttribute('type', 'text');
  
  for(var i=0; i<unitTables.children.length; i++){
    var appendedInput = unitTables.children[i].appendChild(newInputType)
    parentTable.appendChild(appendedInput);
  }
}

document.getElementById('add_btn').onclick=addRow;
<form>

  <div class="panel panel-default">
    <!-- Default panel contents -->
    <div class="panel-heading">Panel heading</div>
    <div class="panel-body">
      <p> ASME Email: </p>
      <input type="text" name="email">
      <br />
      <br />

    </div>

    <!-- Table -->
    <table id="myTable" class="table">
      <tr>
        <th> Technology </th>
        <th> Markets </th>
        <th> Enduring/Emerging </th>
        <th> ASME Relevency </th>
        <th> Comments </th>
      </tr>

      <tr class="unit-table">
        <td>
          <input type="text">
        </td>
        <td>
          <input type="text">
        </td>
        <td>
          <input type="text">
        </td>
        <td>
          <input type="text">
        </td>
        <td>
          <input type="text">
        </td>
      </tr>
      <tr class="unit-table">
        <td>
          <input type="text">
        </td>
        <td>
          <input type="text">
        </td>
        <td>
          <input type="text">
        </td>
        <td>
          <input type="text">
        </td>
        <td>
          <input type="text">
        </td>
      </tr>
      <tr class="unit-table">
        <td>
          <input type="text">
        </td>
        <td>
          <input type="text">
        </td>
        <td>
          <input type="text">
        </td>
        <td>
          <input type="text">
        </td>
        <td>
          <input type="text">
        </td>
      </tr>
    </table>
  </div>

  <button id="add_btn">Add new row</button>
  <input type="submit" name="submit" value="Submit">
</form>

【问题讨论】:

    标签: javascript html html-table row


    【解决方案1】:

    您的问题是在每个按钮事件中刷新您的 Web 的表单标签。你的 JavaScript 代码也有几个问题。

    所以你的代码应该是

      <div class="panel panel-default">
        <!-- Default panel contents -->
        <div class="panel-heading">Panel heading</div>
        <div class="panel-body">
          <p> ASME Email: </p>
          <input type="text" name="email">
          <br />
          <br />
    
        </div>
    
        <!-- Table -->
        <table id="myTable" class="table">
          <tr>
            <th> Technology </th>
            <th> Markets </th>
            <th> Enduring/Emerging </th>
            <th> ASME Relevency </th>
            <th> Comments </th>
          </tr>
    
          <tr class="unit-table">
            <td>
              <input type="text">
            </td>
            <td>
              <input type="text">
            </td>
            <td>
              <input type="text">
            </td>
            <td>
              <input type="text">
            </td>
            <td>
              <input type="text">
            </td>
          </tr>
          <tr class="unit-table">
            <td>
              <input type="text">
            </td>
            <td>
              <input type="text">
            </td>
            <td>
              <input type="text">
            </td>
            <td>
              <input type="text">
            </td>
            <td>
              <input type="text">
            </td>
          </tr>
          <tr class="unit-table">
            <td>
              <input type="text">
            </td>
            <td>
              <input type="text">
            </td>
            <td>
              <input type="text">
            </td>
            <td>
              <input type="text">
            </td>
            <td>
              <input type="text">
            </td>
          </tr>
        </table>
      </div>
    

    JavaScript

    function addRow(){
      var parentTable = document.getElementById('myTable');
      var myTd,myInput;
      var myTr = document.createElement('tr');
      myTr.setAttribute('class','unit-table');
      for (var i=0; i<5;i++){
        myTd = document.createElement('td');
        myInput = document.createElement('input');
        myInput.setAttribute('type','text');
        myTd.appendChild(myInput);
        myTr.appendChild(myTd);
      }
      parentTable.appendChild(myTr);
    }
    document.getElementById('add_btn').onclick=addRow;
    

    【讨论】:

      【解决方案2】:

      你的javascript和html应该如下

      function addRow(){
              var table = document.getElementById("myTable");
              var rows = document.getElementById("myTable").rows.length;
      
      
      
      
              var table = document.getElementById("myTable");
              var rows = document.getElementById("myTable").rows.length;
              // add row 
                  var row = table.insertRow(rows);
      
              // add input in cell 
              for(var i = 0; i < 5; i++){
                var cell1 = row.insertCell(i);
                var inputItem = document.createElement('input');
                cell1.appendChild(inputItem);
              }  
      
              }
      
      
      
      document.getElementById('add_btn').onclick=addRow;
      <form>
      
        <div class="panel panel-default">
          <!-- Default panel contents -->
          <div class="panel-heading">Panel heading</div>
          <div class="panel-body">
            <p> ASME Email: </p>
            <input type="text" name="email">
            <br />
            <br />
      
          </div>
      
          <!-- Table -->
          <table id="myTable" class="table">
            <tr>
              <th> Technology </th>
              <th> Markets </th>
              <th> Enduring/Emerging </th>
              <th> ASME Relevency </th>
              <th> Comments </th>
            </tr>
      
            <tr class="unit-table">
              <td>
                <input type="text">
              </td>
              <td>
                <input type="text">
              </td>
              <td>
                <input type="text">
              </td>
              <td>
                <input type="text">
              </td>
              <td>
                <input type="text">
              </td>
            </tr>
            <tr class="unit-table">
              <td>
                <input type="text">
              </td>
              <td>
                <input type="text">
              </td>
              <td>
                <input type="text">
              </td>
              <td>
                <input type="text">
              </td>
              <td>
                <input type="text">
              </td>
            </tr>
            <tr class="unit-table">
              <td>
                <input type="text">
              </td>
              <td>
                <input type="text">
              </td>
              <td>
                <input type="text">
              </td>
              <td>
                <input type="text">
              </td>
              <td>
                <input type="text">
              </td>
            </tr>
          </table>
        </div>
      
        <input type="submit" name="submit" value="Submit">
      </form>
        <button id="add_btn">Add new row</button>

      【讨论】:

        【解决方案3】:

        喜欢这个

        function addRow(){
        
        
                    var table = document.getElementById("myTable");
                    var rows = document.getElementById("myTable").rows.length;
                    // add row 
                        var row = table.insertRow(rows);
        
                    // add input in cell 
                    for(var i = 0; i < 5; i++){
                      var cell1 = row.insertCell(i);
                      var inputItem = document.createElement('input');
                      cell1.appendChild(inputItem);
                    }  
        
                    }
        

        【讨论】:

        • 感谢您的回答 - 为什么当我单击运行该函数时,它会暂时附加新的输入行然后消失?
        • 是的,在我的回答中是原因(刷新表格)
        • 将参数 type="button" 添加到按钮控件,caballerog -您的ansfer代码创建许多输入,如许多行,在您的“for”中必须按输入数(5)表中没有行数.
        • 确实如此。我编辑很快(原版只有5)
        【解决方案4】:

        这需要做很多工作。这是我的答案:)

        https://jsfiddle.net/www139/1jwf02p7/

        function addRow() {
          var table = document.getElementById('myTable');
          var columnLength = table.getElementsByTagName('tr')[0].children.length;
          var units = document.getElementsByClassName('unit-table');
          var tr = document.createElement('tr');
          tr.className = 'unit-table';
          for (var i = 0; i < columnLength; i++) {
            var td = document.createElement('td');
            var text = document.createElement('input');
            text.type = 'text';
            td.appendChild(text);
            tr.appendChild(td);
          }
          table.appendChild(tr);
        }
        
        document.getElementById('add_btn').onclick = addRow;
        <!--<form>-->
        
        <div class="panel panel-default">
          <!-- Default panel contents -->
          <div class="panel-heading">Panel heading</div>
          <div class="panel-body">
            <p>ASME Email:</p>
            <input type="text" name="email">
            <br />
            <br />
        
          </div>
        
          <!-- Table -->
          <table id="myTable" class="table">
            <tr>
              <th>Technology</th>
              <th>Markets</th>
              <th>Enduring/Emerging</th>
              <th>ASME Relevency</th>
              <th>Comments</th>
            </tr>
        
            <tr class="unit-table">
              <td>
                <input type="text">
              </td>
              <td>
                <input type="text">
              </td>
              <td>
                <input type="text">
              </td>
              <td>
                <input type="text">
              </td>
              <td>
                <input type="text">
              </td>
            </tr>
            <tr class="unit-table">
              <td>
                <input type="text">
              </td>
              <td>
                <input type="text">
              </td>
              <td>
                <input type="text">
              </td>
              <td>
                <input type="text">
              </td>
              <td>
                <input type="text">
              </td>
            </tr>
            <tr class="unit-table">
              <td>
                <input type="text">
              </td>
              <td>
                <input type="text">
              </td>
              <td>
                <input type="text">
              </td>
              <td>
                <input type="text">
              </td>
              <td>
                <input type="text">
              </td>
            </tr>
          </table>
        </div>
        
        <button id="add_btn">Add new row</button>
        <input type="submit" name="submit" value="Submit">
        <!--</form>-->

        【讨论】:

        • 感谢您的回答-我也朝着那个方向前进。你的回答很有意义。 :)
        • @user3882106 谢谢:)
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-01-04
        • 1970-01-01
        • 2016-11-24
        • 2013-05-23
        • 2023-03-11
        • 2011-03-19
        • 1970-01-01
        相关资源
        最近更新 更多