[英]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函数,后者可能更适合某些用例。
因此,最好使用setTimeout函数
UPD:实际上,您可以简单地使用默认队列并自由链接效果(如show
)和非效果(如val
)。 只需将后者包装在queue
- dequeue
调用:
$("input")
.queue(function() { $(this).val("blah").dequeue() })
.delay(1000)
.queue(function() { $(this).val("").dequeue() })
.fadeOut(1000) // etc
/ 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")
队列中的每个函数都一个接一个地调用,并且按预期方式延迟工作。
这有点棘手,但是您可以创建一个几乎不执行任何操作的动画,并使用回调清除值。
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.