【问题标题】:JavaScript Run function only if its the last time its being calledJavaScript 仅在最后一次调用时才运行函数
【发布时间】:2015-03-20 16:32:35
【问题描述】:

我在使用 Javascript 函数更新引导微调器时遇到问题,通常它工作正常,当我多次点击时出现问题,我使用 ajax 更新为购物车选择的产品数量。

如果我在按钮中单击一次效果很好,但如果多次单击以将数量增加 10,则该函数执行 10 次并生成 10 个响应。有点烦。

这是函数:

    var contador = 0;
        function UPDATE_SUM(cant,modo,precio,prod_id,inv_id,lim){
    var canti = document.getElementById(cant).value;
    var quantity = canti;
    if(modo == "up"){
        var cantidad = parseInt(canti) + 1;
        if (cantidad > 0 && cantidad <= lim){
            quantity = cantidad;
            document.getElementById(cant).value = quantity;
            x.request('r:ajax/u.php?cant='+cantidad+'&id='+prod_id+'&inv='+inv_id+'; rl:resp');
        }
    }else if(modo == "down"){
        var cantidad = parseInt(canti) - 1;
        if (cantidad > 0){          
            quantity = cantidad;
            document.getElementById(cant).value = quantity;
            x.request('r:ajax/u.php?cant='+cantidad+'&id='+prod_id+'&inv='+inv_id+'; rl:resp');
        }
    }
    console.log("UPDATE_SUM "+contador);
    var precio = parseFloat(precio);
    var sub_total = precio*quantity;
    contador++;
    setTimeout(function(){
        updtQty(prod_id,sub_total,quantity);
    },1000);
    calcSeguro();
    calcTurcoSafe();
    var envio = document.getElementById('inpenvio');
    var turcosafe = document.getElementById('inpturcosafe');
    var seguro = document.getElementById('inpseguro');
    TOTALIZAR(envio,turcosafe,seguro);
}

function updtQty(id,sub_total,qty){
    contador--;
    console.log("updtQty "+contador);
    if(contador == 0){
        $("#resp").fadeIn().delay(5000).fadeOut();
        document.getElementById('sub_total'+id).innerHTML = 'Bs. '+decimales(sub_total,2);
        document.getElementById('subt'+id).value = sub_total;
    }
}

这是处理程序:

<div class="custom-quantity-input">
                        <input type="text" name="cantidad[]" id="cant6" value="1" readonly="">
                        <input type="hidden" name="subtotal[]" id="subt6" value="135000">
                        <a href="javscript:;" onclick="UPDATE_SUM('cant6','up','135000','6','1','25');" class="quantity-btn quantity-input-up"><i class="fa fa-angle-up"></i></a> <a href="javascript:;" onclick="UPDATE_SUM('cant6','down','135000','6','1','25');" class="quantity-btn quantity-input-down"><i class="fa fa-angle-down"></i></a></div>

任何帮助将不胜感激

【问题讨论】:

  • 我没有在您的问题中看到事件处理程序,但我会假设每个click 都会将另一个事件绑定到按钮。创建一个小提琴,以便我们为您提供更好的答案。
  • 感谢您的回答,我已经更新了代码,您可以在那里看到处理程序

标签: javascript jquery ajax twitter-bootstrap


【解决方案1】:

不要在UPDATE_SUM 方法中执行动画。相反,在函数外部创建一个新的计数器变量,在UPDATE_SUM 内将其递增,并将动画延迟到具有 500 毫秒延迟的新函数(因此将计数器递增 1 并以 500 毫秒超时/延迟调用新函数)。在动画函数内部,将计数器减一,并且仅在计数器达到 0 时才执行动画。这将确保动画仅在用户单击按钮的速度超过每 500 毫秒一次时播放一次。您可以使用超时时间来更好地适应您的用户体验。

【讨论】:

  • 非常感谢您的回答,我认为这是更好的方法。我会尝试并报告回来。再次感谢
  • 请检查我的代码,我已根据您的建议更新了问题,但计数器不起作用。
  • 完成!非常感谢您的回答,我已经更新了问题中的代码。
  • 在我的情况下,我正在调用多个 AJAX,并且只想在最后一个 AJAX 承诺得到满足时才调用我的重新启动功能。截至目前,我找到的唯一解决方案是柜台。有没有更好的方法?
  • @Abhi 在你的情况下,计数器可能是一个很好的解决方案。
猜你喜欢
  • 1970-01-01
  • 2019-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-10
  • 2015-09-21
  • 2016-04-11
相关资源
最近更新 更多