如何使用延迟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('');
}
答案 0 :(得分:4)
jQuery文档清楚地提到了
.delay()方法最适合在排队的jQuery之间延迟 效果。因为它是有限的 - 例如,它没有提供一种方法 取消延迟-.delay()不是JavaScript本机的替代品 setTimeout函数,可能更适合某些用途 例。
所以,最好使用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
/ 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")
队列中的每个函数都是一个接一个地调用,并且延迟按预期工作。
答案 2 :(得分:2)
这有点棘手,但你可以创建一个几乎不做任何事情的动画,并使用一个可以清除值的回调。
if(contents.length<30){
contents.css('color','red')
.val('Error Message').animate({
opacity: 1
}, 5000, function() {
contents.val('');
});
}
最好的方法仍然是使用setTimeout