我有一个jQuery应用程序,一个购物车,如果文本输入字段被更改,它会将信息发回服务器。这是在Ajax请求中完成的。现在,如果Ajaxrequest成功,我想异步重新加载shoppingcart。代码如下:
$(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>*", "");
}
});
});
});
这有效,但只有一次!如果我更改了文本输入字段,则在第一次加载页面后,ID为newbasket的div将异步重新加载。但是,如果我再次尝试改变它,没有任何反应。
我尝试使用Firebug进行一些调试,第一次更改文本输入字段时,它会触发POST事件,然后发生GET事件,此时POST事件成功。但在那之后,当我再次更改文本输入字段时没有任何反应。
那么,如何在每次文本输入更改后实现触发.load()方法?
我也尝试过使用.ajaxComplete()函数,但是当然,这导致了无限循环,因为.load()是一个ajax对象。
答案 0 :(得分:1)
而不是.change(func)
,请在此处使用.live('change', func)
,如下所示:
jInput.live('change', function() {
这将使选择器也适用于添加的任何 new 输入。当您替换当前的元素时,它们的事件处理程序会丢失(或者更确切地说,不会重新创建,因为您有新元素)。 .live()
仅用于此目的,它会侦听来自旧和新元素的事件,无论它们何时被添加。