清除消息jQuery延迟setTimeout

时间:2012-03-09 16:17:46

标签: javascript jquery

如何使用延迟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('');
      }

3 个答案:

答案 0 :(得分:4)

jQuery文档清楚地提到了

  

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

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

所以,最好使用setTimeout函数

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

答案 1 :(得分:4)

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/

答案 2 :(得分:2)

这有点棘手,但你可以创建一个几乎不做任何事情的动画,并使用一个可以清除值的回调。

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

最好的方法仍然是使用setTimeout