Javascript DOM - добавить элемент формы во вновь созданный appendChild?

StackOverflow https://stackoverflow.com/questions/499200

  •  20-08-2019
  •  | 
  •  

Вопрос

У меня есть две функции для добавления и удаления строк таблицы, содержащих элемент ввода формы.Они оба работают нормально, но у меня проблема в том, что мне нужно показывать ввод кнопки Удаления только в впоследствии созданных строках таблицы.Мои две функции заключаются в следующем:

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);
}

и html-контент является:

<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 - скорее новичок, - поэтому я изо всех сил пытаюсь найти решение.

Это было полезно?

Решение

Я предполагаю, что вы пытаетесь избежать наличия кнопки удаления в первой строке, но она нужна там сейчас, потому что вы думаете, что для получения ее в последующих строках она должна быть в строке, которую вы клонируете.Если вместо этого вы просто вставите новый HTML-код для ввода кнопок загрузки и удаления в методе addRow, вы сможете полностью избежать клонирования, и не будет иметь значения, что содержит ваша исходная строка.

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);" />'
}

При этом по-прежнему используется первая строка в качестве шаблона, но вы можете удалить из нее кнопку по мере ее добавления, добавив к существующему тексту.

Другие советы

Если вам нужно создать этот элемент

<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);
};
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top