2011-12-20 63 views
0

我不知道什么标题给予,所以请我道歉,我只是好奇,为什么在下面的代码中,文本变得更改之前,它甚至淡出,即使我'我已经把它淡化了。.text()立即正在处理

$('form').submit(function(){ 
    return false; 
}); 
$('button').on('click',function(){ 
    $(this).addClass('busy'); 
    $(this).parent().find('button').attr('disabled',true); 
    $(this).parent().find("button:not('.busy')").fadeOut(500); 
    $('p').text('Processing..').fadeIn(500).trigger('sfsfsf','wala'); 
}); 
$('p').on('sfsfsf',function(e,data){ 
    //this line below 
    $(this).delay(1000).fadeOut(500).text('Complete!'); 
    $(this).fadeIn(500,function(){ 
     $(this).delay(500).fadeOut(500); 
    }); 
}); 

http://jsfiddle.net/v4nwQ/

为什么会这样,怎么解决呢?

回答

4

因为fadeOut()在动画完成之前立即返回;然后text()立即得到处理。您应该改变​​回调中的文本;

$(this).delay(1000).fadeOut(500, function() { 
    $(this).text('Complete!'); 
}); 

无关,但注意事项;你应该看看缓存$(this)的结果;你说了很多。

$('p').on('sfsfsf',function(e,data){ 
    var self = $(this); 

    self.delay(1000).fadeOut(500, function() { 
     self.text('Complete!'); 
    }); 

    self.fadeIn(500,function(){ 
     self.delay(500).fadeOut(500); 
    }); 
}); 
+0

非常好,现在我明白了。谢谢! – Michelle 2011-12-20 11:05:36

0

尝试:

 
$(this).parent().find("button:not('.busy')").fadeOut(500, function() { 
$('p').text('Processing..').fadeIn(500).trigger('sfsfsf','wala'); 
}); 

0

您需要更改呼叫淡入回功能可按文字就像你在最后几行这样做:

$(this).fadeIn(500,function(){ 
     $(this).delay(500).fadeOut(500); 
    }); 

否则立即执行文本更改

1

是的,这是正确的。链中的所有功能都立即执行。如果您想在动画之后执行某些操作,请使用所有动画包含的回调参数。

和延迟只有延迟动画!它对不是动画的东西没有影响。所以:

$(this).fadeOut(500, function() { $(this).text('Complete!'); }); 
相关问题