#javascript #select #copy #clone
Вопрос:
Я новичок в JS. У меня есть динамическая таблица (я не добавлял код для добавления и удаления строк), которую я хочу отобразить в другой таблице. Я пытаюсь клонировать каждую строку. Все работает, но тег td с выбранным элементом клонирован неправильно. Он показывает выбранное значение или первое значение, если оно не выбрано. Идея этого клона состоит в том, чтобы показать таблицу в модальной форме, и клонированная таблица будет похожа на предварительный просмотр. Клонирование произошло, когда модальный враг показан. В коде ниже я добавляю кнопку для таблицы клонирования. Я думаю, в данном случае это не имеет значения.
Вот мой HTML — код:
<table class="table table-bordered" id="table" >
<thead>
<tr>
<td >#</td>
<td >Description</td>
<td >Qty</td>
<td >Units</td>
<td >Price without vat</td>
<td >Vat %</td>
<td >Total</td>
<td >Del</td>
</tr>
</thead>
<tr class="product">
<td class="cloned" width="4%" >
<input type="number" class="enumer" style="width:100%; border: none; padding: 0" disabled="disabled">
</td>
<td class="cloned" width="34%">
<input type="text" class="item_product" style="width:100%;" name="product[]">
</td>
<td class="cloned" width="18">
<input style="width:100%;" class="qty" id="qty" name="qty[]" pattern="[ -]?([0-9] [.,]?[0-9]*)" type="text" value="0" required>
</td>
<td class="cloned" width="7%">
<input id="item_units[]" class="units" style="width:100%;" name="item_units[]" type="text" value="ks">
</td>
<td class="cloned" width="10%">
<input class="price" style="width:100%;" id='price' name="price_unit[]" pattern="[ -]?([0-9] [.,]?[0-9]*)" value="0" type="text" required>
</td>
<td class="cloned" width="7%" id="vat_td">
<select class="vat" id="vat" name="vat[]" type="text">
<option value="0">0</option>
<option value="10">10</option>
<option value="20">20</option>
</select>
</td>
<input class="hidden" hidden value="1" id="payer_vat_hidden">
<td class="cloned" width="17%">
<input type="number" style="width:100%; background: #dddddd;" class="amount" id="amount" name="amounts[]" readonly>
</td>
<td class="delTD" width="5%">
<button type="button" style="width:100%;" id="deleteRow" class="btn btn-danger btn-sm">Delete</button>
</td>
</tr>
</table>
<button onclick="copyTable()">copy table</button>
<table class="table table-bordered" id="second_table" >
<thead>
<tr>
<th>#</th>
<th>DESCRIPTION</th>
<th class="text-center">QUANTITY</th>
<th class="text-center">UNITS</th>
<th class="text-right">PRICE</th>
<th class="text-right">Total</th>
</tr>
</thead>
<tbody>
</tbody>
</table>
Вот мой код Javascript:
function copyTable(){
$("#second_table tr").remove();
$("#table tr").each(function() {
var $target = $("#second_table");
var $tds = $(this).children(),
$row = $("<tr></tr>");
$row.append($tds.eq(0).clone())
.append($tds.eq(1).clone())
.append($tds.eq(2).clone())
.append($tds.eq(3).clone())
.append($tds.eq(4).clone())
.append($tds.eq(5).clone())
.append($tds.eq(6).clone())
.appendTo($target);
});
}
Комментарии:
1. Вам также необходимо скопировать значение <select> вручную. Используйте
$tds.eq(5).find('select').val()
или какой-либо другой столбец, чтобы захватить его, а затем поместите его в клон.2. Обратите внимание, что использование React вместо jQuery было бы здесь очень полезно. Это требование является ярким примером того, почему существуют интерфейсные платформы.
3. Спасибо. Это должно быть решением, но я немного запутался в том, как установить это значение для каждой строки в целевой таблице.
4. Кстати, вот решение для реакции: codesandbox.io/s/winter-meadow-ebgov?file=/src/App.js
5. Вот неполное переписывание вашего кода jQuery: jsfiddle.net/khrismuc/98rmcLw3