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") {

    }
});                                                  
},

我从这个 得到了解决方案(不是公认的答案)。