#javascript #jquery
#javascript #jquery
Вопрос:
В моем коде ниже пользователь может выбрать цвет и добавить его в динамическую таблицу. количество выбранных цветов отображается в каждой строке, а общее количество всех цветов отображается в нижней части таблицы. пользователь также может удалить любую строку одним щелчком мыши. Мой вопрос заключается в том, как общее количество может быть обновлено, если строка удалена.
<table id="colorTable">
<tr>
<th name="color[]" id="color">Color</th>
</tr>
<tr>
<td id="color-des">
<select id="color-part-list" data-placeholder="Rejected Parts">
<option value="Red">Red</option>
<option value="Grey">Grey</option>
<option value="Blue">Blue</option>
<option value="Yellow">Yellow</option>
<option value="White">White</option>
<option value="Black">Black</option>
</select>
</td>
</tr>
</table>
<div class="button-div">
<input type="button" value="Add The Color" onclick="colorddRow()" />
</div>
<table id="dataTable1-color-parts">
<tr>
<th>Name of the Rejected Parts</th>
<th id="colorparts-qty">Number of Issues</th>
</tr>
</table>
<table id="color-parts-total-qty-table" style="padding:20px;">
<tr>
<th>Total Number of Colors: </th>
<th><div id="col-parts-total-qty"></div</th>
</tr>
</table>
</table>
<script>
function colorddRow() {
var colorpartsrows = "";
var colparts = $('#color-part-list').val();
// Sum of the rejected colors qty in every row
var colpartssum = $("#color-part-list :selected").length;
// Total Sum
var td = document.querySelectorAll('#dataTable1-color-parts >
tbody > tr > td:last-child');
var total = colpartssum;
for (var i = 0; i < td.length; i )
{
total = parseInt(td[i].innerText);
}
document.getElementById('col-parts-total-qty').innerText = total;
console.log(total);
// Creates the dynamic table Onclick
colorpartsrows = "<tr><td><button class=removeDepIt>Delete</button></td><td>" colparts
"</td><td>" colpartssum "</td></tr>";
// Adds the rows to the dynamic table
$(colorpartsrows).appendTo("#dataTable1-color-parts tbody");
// Delete Rows Onclick
$("#dataTable1-color-parts").on('click', '.removeDepIt', function() {
var row = $(this).closest('tr');
var prev = row.prev();
row.remove();
});
}
</script>
Ответ №1:
Это вычисление уже существует в вашем коде! Просто используйте его повторно.
Я создал функцию с той частью вашего кода, где вы вычисляли общее количество…
И я вызвал его после td
добавления и после удаления.
О функции удаления… Этого не должно быть в colorddRow
функции. Это объявление обработчика событий. Если внутри, каждый раз, когда вы добавляете строку, он снова регистрирует обработчик.
// The total function
function calculateTotal(){
// Total Sum
var td = document.querySelectorAll(
"#dataTable1-color-parts > tbody > tr > td:last-child"
);
var total = 0; //colpartssum;
for (var i = 0; i < td.length; i ) {
total = parseInt(td[i].innerText);
}
document.getElementById("col-parts-total-qty").innerText = total;
console.log(total);
}
function colorddRow() {
var colorpartsrows = "";
var colparts = $("#color-part-list").val();
// Sum of the rejected colors qty in every row
var colpartssum = $("#color-part-list :selected").length;
// Creates the dynamic table Onclick
colorpartsrows =
"<tr><td><button class=removeDepIt>Delete</button></td><td>"
colparts
"</td><td>"
colpartssum
"</td></tr>";
// Adds the rows to the dynamic table
$(colorpartsrows).appendTo("#dataTable1-color-parts tbody");
calculateTotal(); // Calculate the total here
} // The add row function ends here.
// Delete Rows Onclick
$("#dataTable1-color-parts").on("click", ".removeDepIt", function () {
var row = $(this).closest("tr");
var prev = row.prev();
row.remove();
calculateTotal(); // Calculate the total here
});
Комментарии:
1. Спасибо за ответ. У меня есть еще один вопрос относительно этой части кода: «#dataTable1-color-parts> tbody> tr> td: последний дочерний элемент» . если вместо последнего столбца я хочу настроить таргетинг на 3-й столбец, что я должен написать вместо td:last-child ?
2.Вместо
:last-child
этого вы должны использовать:nth-child(3)
ссылку