Using delay with HTML or text setting doesn't work
delay() defaults to the animation queue, for effects like fadeOut(), etc. You should use setTimeout() instead:
window.setTimeout(function () {
$("#element").html(' ');
}, 3000);
From http://api.jquery.com/delay/:
jQuery.delay() is best for delaying between queued jQuery effects and such, and is not a replacement for JavaScript's native setTimeout function, which may be more appropriate for certain use cases.
.html()
isn't a queued function. If you want it to happen in order in the animation queue, you'll have to .queue()
it yourself, like this:
$('#element').delay(3000).queue(function(n) {
$(this).html(' '); n();
});
If you're not chaining animations or anything like this, use setTimeout()
or setInterval()
(whichever is appropriate to the situation) directly, .delay()
is just a wrapper for setTimeout()
and there's no reason to use extra code/complexity when there's no need.