繁体   English   中英

清除消息jQuery延迟setTimeout

[英]Clearing message jQuery delay setTimeout

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

jQuery文档明确提到

.delay()方法最适合在排队的jQuery效果之间进行延迟。 因为它是有限的(例如,它没有提供消除延迟的方法),所以.delay()不能替代JavaScript的本机setTimeout函数,后者可能更适合某些用例。

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

因此,最好使用setTimeout函数

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

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/

这有点棘手,但是您可以创建一个几乎不执行任何操作的动画,并使用回调清除值。

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

最好的方法仍然是使用setTimeout

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM