Jquery delay()和fadeOut()

时间:2014-04-04 06:34:43

标签: jquery delay fadein fadeout

我一直坚持一个小问题,我想在我点击其他区块时淡出特定区块,然后等待2.5秒并淡出特定区块。这是我到目前为止的代码:

$('button.other-block').click(function () {
    $(this)
    .find('.specific-block')
    .fadeIn()
    .delay(2500).queue(function() {$(this).fadeOut(1600, complete)});
});

fadeIn就好了,延迟功能也运行良好。但fadeOut似乎无法正常工作(如果我将其更改为.fadeOut(1600)或仅仅.fadeOut()并不重要) 问题可能在哪里?

以下是完整的代码,因为上面有更多的简化版本。

HTML:

<div class="account-edit-group">    
                    <input type="text" value="" class="account-edit-field">
                    <div>
                        <button class="account-edit-field-save"> </button><button class="account-edit-field-cancel"> </button>
                    </div>  
                    <div class="account-edit-field-warning"><span class="w-text">Error! You can enter no more than 30 symbols</span></div>
        </div>

JS:

$('button.account-edit-field-save').click(function () {
      var checklength = $(this).parent().parent().find('input.account-edit-field');  
        if(checklength.val().length > 30)
        {
        $(this)
        .parent()
        .parent()
        .find('.account-edit-field-warning')
        .fadeIn()
        .delay(2500).queue(function() {
        $(this).fadeOut(1600, complete).dequeue(); 
        });     
        }
        if(checklength.val().length <= 30)
        {
        $(this)
        .parent()
        .parent()
        .removeClass('acc-edit-f')
        }
      });

因此,JS正在检查单击了哪个按钮,如果单击了按钮保存,则会检查上面字段的值。如果有超过30个符号 - 它将显示错误消息。我需要首先淡出,显示一点,然后淡出。这就是问题,它不会消失,我也不知道为什么。

4 个答案:

答案 0 :(得分:9)

你可以通过传递这样的回调来等待淡入完成:

$('element').fadeIn(function () {
   // Fade in complete
});

淡入完成后,您可以继续延迟并淡出。

$('button.other-block').click(function () {
   $(this)
     .find('.specific-block')
     .fadeIn(function () {
        $(this).delay(2500).fadeOut(1600, complete);
     });
});

如果不起作用,请切换到Mootools;)

编辑:工作示例http://jsfiddle.net/tbleckert/RcL5y/

答案 1 :(得分:0)

只是做:

$('button.other-block').click(function () {
    $(this)
    .find('.specific-block')
    .fadeIn()
    .delay(2500).fadeOut(1600, complete);
});

答案 2 :(得分:0)

尝试在此处使用 .dequeue()

$('button.other-block').click(function () {
    $(this)
    .find('.specific-block')
    .fadeIn()
    .delay(2500).queue(function() {
        $(this).fadeOut(1600, complete).dequeue(); 
    });
});

答案 3 :(得分:0)

您可以在.fadeIn()中尝试回调函数:

$(this).closest('.account-edit-group').find('.account-edit-field-warning')
       .fadeIn('normal', function(){
          $(this).delay(2500).fadeOut();
       });  

虽然这应该有效:

 $(this).closest('.account-edit-group')
        .find('.account-edit-field-warning')
        .fadeIn()
        .delay(2500)
        .fadeOut();