2010-09-06 52 views
1

我有一个jQuery应用程序,一个购物车,如果文本输入字段被更改,它会将信息发布到服务器。这是在Ajax请求中完成的。现在,如果Ajaxrequest成功,我想重新加载购物车异步。代码如下:我可以在正在进行的Ajax请求(例如,成功回调函数)中发出Ajax请求吗?

$(document).ready(function() { 

    var jInput = $(":input"); 
    jInput.change(function() { 
     var vareAntal = $(this).val(); 
     var vareID = $(this).siblings("input#vareID").val(); 
     $.ajax({ 
      type: 'POST', 
      url: 'checkout.aspx', 
      data: { 'ID': vareID, 'Antal': vareAntal }, 
      success: function() { 
       $("#newbasket").load(location.href + " #newbasket>*", ""); 
      } 
     }); 
    }); 
}); 

这个工程,但只有一次!如果我更改了文本输入域,在第一次加载页面之后,具有newbasket ID的div将异步重新加载。但如果我试图再次改变它,没有任何反应。

我试着用Firebug做一些调试,当我第一次改变文本输入字段时,它触发POST事件,然后发生GET事件,当POST事件成功时。但在此之后,当我再次更改文本输入字段时,什么也没有发生。

那么,如何在每个文本输入更改后实现触发.load()方法?

我也尝试过使用.ajaxComplete()函数进行实验,但是当然这会导致无限循环,因为.load()是一个ajax对象。

回答

1

相反的.change(func),使用.live('change', func)这里,像这样:

jInput.live('change', function() { 

这将使任何输入选择器的工作添加。当你正在替换你当前的元素时,他们的事件处理程序就会丢失(或者更确切地说,不会重新创建,因为你有新的元素)。 .live()仅用于此目的,它会监听来自旧新元素的事件,而不管它们何时添加。

+0

谢谢,这工作就像一个魅力! – MadsMadsDk 2010-09-06 12:36:23

相关问题