在jQuery中删除元素的问题

jcr*_*ley 1 javascript jquery settimeout fadeout

我试图用jQuery从页面中删除一个对象.我也想动画删除.目标是使元素fadeOut(),等待一秒,然后删除().但它似乎拒绝等待删除元素,即使我在setTimeout()函数中使用它.如何创建元素fadeOut(),然后删除()它?

$("button").click(function() {
    $(this).fadeOut();
    setTimeout(function() { $(this).remove();}, 1000);
});
Run Code Online (Sandbox Code Playgroud)

Dmi*_*try 8

仔细阅读手册:http: //api.jquery.com/fadeOut/

fadeOut()方法有一个在fadeOut完成后调用的回调.要使用它:

$("button").click(function() {
    $(this).fadeOut(function() { $(this).remove();});
});
Run Code Online (Sandbox Code Playgroud)

在删除元素之前,应该没有理由在fadeOut完成后等待一秒,因为元素在删除时将不可见.


Aln*_*tak 7

在你的超时功能中,this不是你想象的那样 - 它实际上是全局window对象.

无论如何(没有双关语意)你应该使用"完成回调":

$("button").click(function() {
    $(this).fadeOut('slow', function() {
        $(this).remove();
    });
});
Run Code Online (Sandbox Code Playgroud)

从来没有,混合setTimeout和动画队列.它的优良交错两个,即具有完成回调启动一个定时器,或有一个计时器启动动画,但它从来没有确定,假定你可以同时启动一个1000毫秒的动画和1000ms的定时器,并让它们完全在同一时间.

编辑固定代码 - 不需要self完成回调,我还在考虑setTimeout,this当我写的时候!