在AJAX函数.remove()无法正常工作

时间:2014-11-03 22:04:39

标签: javascript jquery ajax

在使用$.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"
    );
});

2 个答案:

答案 0 :(得分:3)

进行以下更改,它应该有效。成功回调thisjqXHR对象,因此您必须在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"
    );
});