Jquery执行功能第三方功能结束后

时间:2014-11-29 00:27:57

标签: javascript jquery prestashop

我的问题没有找到任何结果。

我有Prestashop 1.5.6,我需要在blockcart添加产品后执行我的jQuery函数。

BlockCart和我的代码以相同的事件开始,因为我知道unbind会禁用其他处理程序事件,如何在页脚代码中重新启动unbind?。

所以我的代码不起作用,因为Blockcart首先启动

//---------BlockCart Code---------

    overrideButtonsInThePage : function(){
    //for every 'add' buttons...
    $('.ajax_add_to_cart_button').unbind('click').click(function(){
        var idProduct =  $(this).attr('rel').replace('nofollow', '').replace('ajax_id_product_', '');
        if ($(this).attr('disabled') != 'disabled')
            ajaxCart.add(idProduct, null, false, this);
        return false;
    });
    //for product page 'add' button...
    $('#add_to_cart input').unbind('click').click(function(){
        ajaxCart.add( $('#product_page_product_id').val(), $('#idCombination').val(), true, null, $('#quantity_wanted').val(), null);
        return false;
    });


//-------- Footer code--------
$('.button.ajax_add_to_cart_button.exclusive, .button.ajax_add_to_cart_button.btn.btn-default').on('click',function(){
    var id_product = $(this).attr('data-id-product');
    myfunction(id_product);
});

在没有使用回调函数编辑blockCart模块的情况下,可以检测到blockcart何时结束脚本?

谢谢!

3 个答案:

答案 0 :(得分:1)

最后结果是覆盖了blockCart函数。

我将overrideButtonsInThePage的副本复制到我的js中以覆盖它,并在事件中添加我的代码。

完美运作

答案 1 :(得分:0)

根据blockcart功能的不同,您可以尝试:

//-------- Footer code--------
$('.button.ajax_add_to_cart_button.exclusive, .button.ajax_add_to_cart_button.btn.btn-default').click(function(){
    var id_product = $(this).attr('data-id-product');
    setTimeout(function() { myfunction(id_product); }, 0);
});

这将导致您的函数在现有堆栈完成执行后执行。您可以在Why is setTimeout(fn, 0) sometimes useful?中详细了解其功能。只有当blockcart处理程序是同步的时,这才有用。

答案 2 :(得分:0)

您可以使用$.ajaxComplete(); and .ajaxStart()

实际监控ajax通话

http://api.jquery.com/ajaxcomplete/

您可以做的是比较发送ajax的网址。添加到购物车URL有预先编码的GET参数,因此区别于其他ajax调用并不困难。然后在$.ajaxComplete();上你应该比较响应结果(确定它是成功的)然后执行你的功能。这样你就不会修改任何东西,你只需要观察ajax动作