清除消息 jQuery 延迟设置超时

Clearing message jQuery delay setTimeout

本文关键字:设置 超时 延迟 jQuery 消息 清除      更新时间:2023-09-26
如何使用

延迟jQuery函数而不是setTimeout在几秒钟后清除字段消息?下面的代码将立即清除值。

    var $this = $(this),
            mid = $this.find("#emid"),
            contents = $this.find("#equestion");    
    if(contents.length<30){
      contents.css('color','red')
      .val('Error Message')
      .delay(5000)
      .val('');
      }

UPD:实际上,您可以简单地使用默认队列并自由链接效果(如show(和非效果(如val(。只需将后者包装在queue中 - dequeue调用:

$("input")
    .queue(function() { $(this).val("blah").dequeue() })
    .delay(1000)
    .queue(function() { $(this).val("").dequeue() })
    .fadeOut(1000) // etc

http://jsfiddle.net/cA4jB/1/

/UPD

不,你不必(实际上也不应该(使用 setTimeout。 jQuery为此提供了一个很好的内置机制,称为queue。基本思想是这样的:在命名队列中"收集"函数或延迟:

 $(elem).queue("queueName", function(next) { do something and call next() });
 $(elem).queue("queueName", function(next) { do something else and call next() });
 $(elem).delay(3000, "queueName");
 $(elem).queue("queueName", function(next) { do something else and call next() });

然后调用dequeue()开始处理:

 $(elem).dequeue("queueName")

队列中的每个函数一个接一个地调用,延迟按预期工作。

在行动:http://jsfiddle.net/cA4jB/

jQuery文档明确提到

.delay(( 方法最适合在排队的 jQuery 之间延迟 影响。因为它是有限的——例如,它没有提供一种方法 取消延迟 - .delay(( 不是 JavaScript 原生的替代品 setTimeout 函数,可能更适合某些用途 例。

http://api.jquery.com/delay/

所以,最好使用 setTimeout 函数

https://developer.mozilla.org/en/DOM/window.setTimeout

这有点棘手,但你可以创建一个几乎什么都不做的动画,并有一个回调来清除值。

if(contents.length<30){
    contents.css('color','red')
        .val('Error Message').animate({
            opacity: 1
        }, 5000, function() {
            contents.val('');
        });
}

最好的方法仍然是使用 setTimeout