在使用$.post()
的jQuery单击函数中,如果响应返回true,则我在响应函数中嵌套了.remove()
函数。我的alert()
似乎可以正常处理代码,但.remove()
似乎无法正常工作,即使同一空间中的alert()
代码似乎正在处理。放在$.post()
之外的相同代码工作得很好。
var container = $(".container");
var delete = $("a.delete");
var dataId = $(delete).data("dataid");
delete.click(function(e) {
e.preventDefault();
$.post("url.php",
{'data': dataId},
function(response) {
if (response == true) {
alert("IT WORKED");
$(this).closest(container).remove();
}
},
"json"
);
});
答案 0 :(得分:3)
进行以下更改,它应该有效。成功回调this
是jqXHR
对象,因此您必须在ajax调用之前缓存this
:
delete.click(function(e) {
e.preventDefault();
var that = $(this);
$.post("url.php",
{'data': dataId},
function(response) {
if (response == true) {
alert("IT WORKED");
that.closest(container).remove();
}
},
"json"
);
});
答案 1 :(得分:1)
作为另一个答案的替代方案,还可以使用jQuery.proxy()函数将上下文与您可能需要的内容相关联。
例如:
delete.click(function(e) {
e.preventDefault();
$.post("url.php",
{'data': dataId},
$.proxy(function(response) {
if (response == true) {
alert("IT WORKED");
$(this).closest(container).remove();
}
}, this),
"json"
);
});