I know this this is a very old post but I've combined a few of the answers into a jQuery wrapper function that supports chaining. Hope it benefits someone:
$.fn.queueAddClass = function(className) {
this.queue('fx', function(next) {
$(this).addClass(className);
next();
});
return this;
};
And here's a removeClass wrapper:
$.fn.queueRemoveClass = function(className) {
this.queue('fx', function(next) {
$(this).removeClass(className);
next();
});
return this;
};
Now you can do stuff like this - wait 1sec, add .error
, wait 3secs, remove .error
:
$('#div').delay(1000).queueAddClass('error').delay(2000).queueRemoveClass('error');
Try this simple arrow funtion:
setTimeout( () => { $("#div").addClass("error") }, 900 );
Try this:
function removeClassDelayed(jqObj, c, to) {
setTimeout(function() { jqObj.removeClass(c); }, to);
}
removeClassDelayed($("#div"), "error", 1000);
Of course it would be more simple if you extend jQuery like this:
$.fn.addClassDelay = function(className,delay) {
var $addClassDelayElement = $(this), $addClassName = className;
$addClassDelayElement.addClass($addClassName);
setTimeout(function(){
$addClassDelayElement.removeClass($addClassName);
},delay);
};
after that you can use this function like addClass:
$('div').addClassDelay('clicked',1000);
jQuery's CSS manipulation isn't queued, but you can make it executed inside the 'fx' queue by doing:
$('#div').delay(1000).queue('fx', function() { $(this).removeClass('error'); });
Quite same thing as calling setTimeout but uses jQuery's queue mecanism instead.
Delay operates on a queue. and as far as i know css manipulation (other than through animate) is not queued.
delay
does not work on none queue functions, so we should use setTimeout()
.
And you don't need to separate things. All you need to do is including everything in a setTimeOut
method:
setTimeout(function () {
$("#div").addClass("error").delay(1000).removeClass("error");
}, 1000);
AFAIK the delay method only works for numeric CSS modifications.
For other purposes JavaScript comes with a setTimeout method:
window.setTimeout(function(){$("#div").removeClass("error");}, 1000);
Source: Stackoverflow.com