JQuery动画回调不在循环中工作

JQuery动画回调不在循环中工作,jquery,animation,callback,Jquery,Animation,Callback,我有一个由jquery操作的帖子列表,当删除表中的一个或多个帖子行时,我希望这些行逐渐淡出,然后从DOM中删除,删除一行的代码如下: $('.post#' + postID).parent('tr').fadeOut('slow', function() { $('.post#' +postID).parent('tr').remove(); }); 它对于单行删除非常有效,但是当我将上面的代码部分放入for循环时: for(var i = 0; i < selectedPost

我有一个由jquery操作的帖子列表,当删除表中的一个或多个帖子行时,我希望这些行逐渐淡出,然后从DOM中删除,删除一行的代码如下:

$('.post#' + postID).parent('tr').fadeOut('slow', function() {
    $('.post#' +postID).parent('tr').remove();
});
它对于单行删除非常有效,但是当我将上面的代码部分放入for循环时:

for(var i = 0; i < selectedPostIds.length; i ++) {
    $('.post#' + selectedPostIds[i]).parent('tr').fadeOut('slow', function() {
        $('.post#' + selectedPostIds[i]).parent('tr').remove();
    });
}

动画仍然有效,但是DOM元素,即post行没有被删除。有什么建议吗?提前感谢。

这是因为在循环中错误使用了闭包变量

在回调中,它引用tr元素,因此您可以使用

for (var i = 0; i < selectedPostIds.length; i++) {
    $('.post#' + selectedPostIds[i]).parent('tr').fadeOut('slow', function () {
        $(this).remove();
    });
}
也看到


工作得很好!哦,你把我从几个小时的挣扎中救了出来,真的谢谢你!我注意到jslint给出了一个警告:不要在循环中生成函数。为什么会出现这种情况,以及如何消除它?