[英]Remove table rows updating total data using jQuery
我有一个表,可以在其中添加多个数字并创建add more
按钮,还可以在表上添加新行并使用jQuery计算所有总数。 现在,当我删除新行时,总值不会更新,但是当我单击一些input fields
然后更新时。 现在我的问题是
删除行后,如何使总值自动更新。
下面是我的代码:
function addMore() { var new_raw = $('<tr><td><a href="javascript:void(0);" style="padding:0px;" class="remove">Remove</a><td><input type="number" class="addData"></td></tr>'); new_raw.insertBefore('#my_new_raw'); $("#myTable").on('click', '.remove', function() { $(this).parent().parent().remove(); }); } $(document).on('blur keyup', '.addData', function(e) { var sum = 0; $('.addData').each(function(i) { if (!isNaN(this.value) && this.value.length != 0) { if ($(this).hasClass('addData')) { sum += parseFloat(this.value); } } }); $('#my_total').val(sum.toFixed(2)); })
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <table class="table" id="myTable"> <tbody> <tr> <td>Value 1</td> <td><input type="number" class="addData"></td> </tr> <tr> <td>Value 2</td> <td><input type="number" class="addData"></td> </tr> <tr id="my_new_raw"> <td><a href="javascript:void(0);" onclick="addMore()">Add More</a></td> <td></td> </tr> <tr> <td>Total</td> <td><input type="number" readonly id="my_total"></td> </tr> </tbody> </table>
我知道我没有调用函数来更新总数,因为我不知道怎么做。 在这里帮我。 谢谢前进
TL; DR只需再次calculate
。
您的计算方式已经很好,只需将其包装一个函数,然后就可以随时调用它。
function addMore() { var new_raw = $('<tr><td><a href="javascript:void(0);" style="padding:0px;" class="remove">Remove</a><td><input type="number" class="addData"></td></tr>'); new_raw.insertBefore('#my_new_raw'); $("#myTable").on('click', '.remove', function() { $(this).parent().parent().remove(); calculate(); }); } function calculate() { var sum = 0; $('.addData').each(function(i) { if (!isNaN(this.value) && this.value.length != 0) { if ($(this).hasClass('addData')) { sum += parseFloat(this.value); } } }); $('#my_total').val(sum.toFixed(2)); } $(document).on('blur keyup', '.addData', function(e) { calculate(); })
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <table class="table" id="myTable"> <tbody> <tr> <td>Value 1</td> <td><input type="number" class="addData"></td> </tr> <tr> <td>Value 2</td> <td><input type="number" class="addData"></td> </tr> <tr id="my_new_raw"> <td><a href="javascript:void(0);" onclick="addMore()">Add More</a></td> <td></td> </tr> <tr> <td>Total</td> <td><input type="number" readonly id="my_total"></td> </tr> </tbody> </table>
如果使用blur
和keyup
,则使用箭头更改数字值时不会改变总数。 我更喜欢input
事件。 您可以在点击删除时触发input
事件:
$('.addData').trigger('input');
工作代码示例:
function addMore() { var new_raw = $('<tr><td><a href="javascript:void(0);" style="padding:0px;" class="remove">Remove</a><td><input type="number" class="addData"></td></tr>'); new_raw.insertBefore('#my_new_raw'); $("#myTable").on('click', '.remove', function() { $(this).parent().parent().remove(); $('.addData').trigger('input'); }); } $(document).on('input', '.addData', function(e) { var sum = 0; $('.addData').each(function(i) { if (!isNaN(this.value) && this.value.length != 0) { if ($(this).hasClass('addData')) { sum += parseFloat(this.value); } } }); $('#my_total').val(sum.toFixed(2)); })
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <table class="table" id="myTable"> <tbody> <tr> <td>Value 1</td> <td><input type="number" class="addData"></td> </tr> <tr> <td>Value 2</td> <td><input type="number" class="addData"></td> </tr> <tr id="my_new_raw"> <td><a href="javascript:void(0);" onclick="addMore()">Add More</a></td> <td></td> </tr> <tr> <td>Total</td> <td><input type="number" readonly id="my_total"></td> </tr> </tbody> </table>
或:通过使用功能
function addMore() { var new_raw = $('<tr><td><a href="javascript:void(0);" style="padding:0px;" class="remove">Remove</a><td><input type="number" class="addData"></td></tr>'); new_raw.insertBefore('#my_new_raw'); $("#myTable").on('click', '.remove', function() { $(this).parent().parent().remove(); updateTotal(); }); } $(document).on('input', '.addData', function(e) { updateTotal(); }); function updateTotal(){ var sum = 0; $('.addData').each(function(i) { if (!isNaN(this.value) && this.value.length != 0) { if ($(this).hasClass('addData')) { sum += parseFloat(this.value); } } }); $('#my_total').val(sum.toFixed(2)); }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <table class="table" id="myTable"> <tbody> <tr> <td>Value 1</td> <td><input type="number" class="addData"></td> </tr> <tr> <td>Value 2</td> <td><input type="number" class="addData"></td> </tr> <tr id="my_new_raw"> <td><a href="javascript:void(0);" onclick="addMore()">Add More</a></td> <td></td> </tr> <tr> <td>Total</td> <td><input type="number" readonly id="my_total"></td> </tr> </tbody> </table>
简单地将计算代码包装为函数,并使用closest()
代替parent().parent()
function addMore() { var new_raw = $('<tr><td><a href="javascript:void(0);" style="padding:0px;" class="remove">Remove</a><td><input type="number" class="addData"></td></tr>'); new_raw.insertBefore('#my_new_raw'); } function calc() { var sum = 0; $('.addData').each(function(i) { if (!isNaN(this.value) && this.value.length != 0) { if ($(this).hasClass('addData')) { sum += parseFloat(this.value); } } }); $('#my_total').val(sum.toFixed(2)); } $(document).on('blur keyup', '.addData', function(e) { calc(); }).on('click', '#myTable .remove', function() { $(this).closest('tr').remove(); calc(); });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <table class="table" id="myTable"> <tbody> <tr> <td>Value 1</td> <td><input type="number" class="addData"></td> </tr> <tr> <td>Value 2</td> <td><input type="number" class="addData"></td> </tr> <tr id="my_new_raw"> <td><a href="javascript:void(0);" onclick="addMore()">Add More</a></td> <td></td> </tr> <tr> <td>Total</td> <td><input type="number" readonly id="my_total"></td> </tr> </tbody> </table>
<script>
function addMore() {
var new_raw = $('<tr><td><a href="javascript:void(0);" style="padding:0px;" class="remove">Remove</a><td><input type="number" class="addData"></td></tr>');
new_raw.insertBefore('#my_new_raw');
$("#myTable").on('click', '.remove', function () {
$(this).parent().parent().remove();
var sum = 0;
$('.addData').each(function (i) {
if (!isNaN(this.value) && this.value.length != 0) {
if ($(this).hasClass('addData')) {
sum += parseFloat(this.value);
}
}
});
$('#my_total').val(sum.toFixed(2));
});
}
$(document).on('blur keyup', '.addData', function (e) {
var sum = 0;
$('.addData').each(function (i) {
if (!isNaN(this.value) && this.value.length != 0) {
if ($(this).hasClass('addData')) {
sum += parseFloat(this.value);
}
}
});
$('#my_total').val(sum.toFixed(2));
})
</script>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.