Jquery 转发器删除项目不更新值
Jquery repeater delete item not updating values
我正在使用这个jquery repeater。
我在每次添加表格时都使用自定义计算,比如将一个输入与另一个相乘,然后得出相乘结果的总和。
问题是当我们点击删除时,它只是隐藏了行但没有删除项目的值,
当我们再删除一个项目时,它会删除隐藏的第一个项目,我的计算得到更新。
我在删除项目时检查 class 的数量,第一次删除时它不会减少,第二次删除时它总是减少,
如何完全删除包含其值的行?
var _CalTotal = function () {
console.log($(".billitem_quantity").length );
//Calculate total of quantity
var total_quantity = 0;
$(".billitem_quantity").each(function(){
total_quantity += parseFloat($(this).val());
});
$('#itemquantity_total').val(total_quantity.toFixed(2));
**//Calculate total of amount**
var total_amount = 0;
$(".billitem_total").each(function(){
total_amount += parseFloat($(this).val());
});
$('#bill_total').val(total_amount.toFixed(2));
console.log('test');
}
下面是隐藏代码,
hide: function(deleteElement) {
Swal.fire({
title: "Are you sure to cancel this order?",
text: "You will not able to revert this",
icon: "question",
showCancelButton: true,
confirmButtonText: "Yes, delete it!",
cancelButtonText: "No, revert it!",
reverseButtons: true,
}).then(function(result) {
if (result.value) {
$(this).slideUp(deleteElement);
//I guess something is missing here to delete that item with first delete fire.
_CalTotal(); //Here i am calling calltotal function.
} else if (result.dismiss === "cancel") {
}
});
},
经过一些调试后,我发现将 setTimeout()
设置为 1 秒可以解决您的问题。这意味着一些代码在后台被异步处理。因此你需要一个回调函数或一个承诺。
您可以通过添加到 slideUp()
回调函数来做到这一点:
hide: function(deleteElement) {
Swal.fire({
title: "Are you sure to cancel this order?",
text: "You will not able to revert this",
icon: "question",
showCancelButton: true,
confirmButtonText: "Yes, delete it!",
cancelButtonText: "No, revert it!",
reverseButtons: true,
}).then(function(result) {
if (result.value) {
$(this).slideUp(function(){
deleteElement();
_CalTotal();
);
} else if (result.dismiss === "cancel") {
}
});
},
我从这个 得到了解决方案(不是公认的答案)。
我正在使用这个jquery repeater。
我在每次添加表格时都使用自定义计算,比如将一个输入与另一个相乘,然后得出相乘结果的总和。
问题是当我们点击删除时,它只是隐藏了行但没有删除项目的值, 当我们再删除一个项目时,它会删除隐藏的第一个项目,我的计算得到更新。
我在删除项目时检查 class 的数量,第一次删除时它不会减少,第二次删除时它总是减少,
如何完全删除包含其值的行?
var _CalTotal = function () {
console.log($(".billitem_quantity").length );
//Calculate total of quantity
var total_quantity = 0;
$(".billitem_quantity").each(function(){
total_quantity += parseFloat($(this).val());
});
$('#itemquantity_total').val(total_quantity.toFixed(2));
**//Calculate total of amount**
var total_amount = 0;
$(".billitem_total").each(function(){
total_amount += parseFloat($(this).val());
});
$('#bill_total').val(total_amount.toFixed(2));
console.log('test');
}
下面是隐藏代码,
hide: function(deleteElement) {
Swal.fire({
title: "Are you sure to cancel this order?",
text: "You will not able to revert this",
icon: "question",
showCancelButton: true,
confirmButtonText: "Yes, delete it!",
cancelButtonText: "No, revert it!",
reverseButtons: true,
}).then(function(result) {
if (result.value) {
$(this).slideUp(deleteElement);
//I guess something is missing here to delete that item with first delete fire.
_CalTotal(); //Here i am calling calltotal function.
} else if (result.dismiss === "cancel") {
}
});
},
经过一些调试后,我发现将 setTimeout()
设置为 1 秒可以解决您的问题。这意味着一些代码在后台被异步处理。因此你需要一个回调函数或一个承诺。
您可以通过添加到 slideUp()
回调函数来做到这一点:
hide: function(deleteElement) {
Swal.fire({
title: "Are you sure to cancel this order?",
text: "You will not able to revert this",
icon: "question",
showCancelButton: true,
confirmButtonText: "Yes, delete it!",
cancelButtonText: "No, revert it!",
reverseButtons: true,
}).then(function(result) {
if (result.value) {
$(this).slideUp(function(){
deleteElement();
_CalTotal();
);
} else if (result.dismiss === "cancel") {
}
});
},
我从这个