代码之家  ›  专栏  ›  技术社区  ›  BrynJ

JavaScriptDOM-将表单元素添加到新创建的appendChild?

  •  2
  • BrynJ  · 技术社区  · 16 年前

    function addRow(table_id){
    var clone;
    var rows=document.getElementById(table_id).getElementsByTagName('tr');
    var index=rows.length;
    var tbo=document.getElementById(table_id).getElementsByTagName('tbody')[0];
    clone=rows[index-1].cloneNode(true);
    tbo.appendChild(clone);
    }
    
    function delRow(table_id,button){
    var row = button.parentNode.parentNode;
    var tbo = document.getElementById(table_id).getElementsByTagName('tbody')[0];   
    tbo.removeChild(row);
    }
    

    <form>
    <table id="mytab">
    <tr>
    <td>Upload File <input type="file" name="uploadfile[]" onchange="addRow('mytab')" /> <input name="del_row" type="button" value="Remove Row" onclick="delRow('mytab',this)"/></td>
    </tr>
    </table>
    </form>
    

    我决不是一个Javascript专家——更像是一个新手——所以我正在努力想出一个解决方案。

    2 回复  |  直到 16 年前
        1
  •  2
  •   tvanfosson    16 年前

    我假设您试图避免在第一行中使用“删除”按钮,但现在需要它,因为您认为要在后续行中使用它,您需要在要克隆的行中使用它。相反,如果您只是在addRow方法中为upload和delete按钮输入插入新的HTML,则可以完全避免克隆,而不管原始行包含什么内容。

    function addRow(table_id){
       var table = document.getElementById(table_id);
       var row = table.insertRow(table.rows.length);
       var cell = row.insertCell(0);
       var template = table.rows[0].cells[0].innerHTML;
       cell.innerHTML = template + '<input type="button" value="Remove Row"'
                     + ' onclick="delRow(\'' + table_id + '\',this);" />'
    }
    

    这仍然使用第一行作为模板,但您可以在添加按钮时将其删除,方法是将其附加到现有文本中。

        2
  •  2
  •   Luca Matteis    16 年前

    如果需要创建此元素

    <input name="del_row" type="button" value="Remove Row" onclick="delRow('mytab',this)"/>
    

    每次调用addRow函数时,您都可以在addRow()中执行此操作;

    var input = document.createElement("input");
    input.setAttribute("name", "del_row");
    input.setAttribute("type", "button");
    input.setAttribute("value", "Remove Row");
    input.onclick = function() {
        delRow("+table_id+", this);
    };