jQuery:我可以在addClass()之间调用delay()吗?

时间:2010-03-24 17:46:29

标签: jquery delay

简单的事情:

$("#div").addClass("error").delay(1000).removeClass("error");

似乎不起作用。什么是最简单的选择?

10 个答案:

答案 0 :(得分:348)

您可以创建一个新的队列项来删除该类:

$("#div").addClass("error").delay(1000).queue(function(next){
    $(this).removeClass("error");
    next();
});

或使用dequeue方法:

$("#div").addClass("error").delay(1000).queue(function(){
    $(this).removeClass("error").dequeue();
});

你需要调用nextdequeue的原因是让jQuery知道你完成了这个排队的项目,并且它应该转到下一个项目。

答案 1 :(得分:48)

AFAIK延迟方法仅适用于数字CSS修改。

出于其他目的,JavaScript附带了一个setTimeout方法:

window.setTimeout(function(){$("#div").removeClass("error");}, 1000);

答案 2 :(得分:8)

我知道这是一篇非常古老的帖子,但我已将一些答案合并到一个支持链接的jQuery包装函数中。希望它有益于某人:

import numpy as np
import time
import theano

Exception                                 Traceback (most recent call last)
<ipython-input-1-432f5c01387b> in <module>()
      1 import numpy as np
      2 import time
----> 3 import theano

c:\users\t-ninma\documents\studymaterials\theano\theano\__init__.py in <module>()
     79 from theano.misc.safe_asarray import _asarray
     80 
---> 81 from theano.printing import pprint, pp
     82 
     83 from theano.scan_module import scan, map, reduce, foldl, foldr, clone

c:\users\t-ninma\documents\studymaterials\theano\theano\printing.py in <module>()
     42                 pydot_imported_msg = "pydot can't find graphviz"
     43         else:
---> 44             pd.Dot.create(pd.Dot())
     45             pydot_imported = True
     46     except ImportError:

C:\Users\t-ninma\AppData\Local\Continuum\Anaconda2\lib\site-packages\pydot.pyc in create(self, prog, format)
   1874                 raise Exception(
   1875                     '"{prog}" not found in path.'.format(
-> 1876                         prog=prog))
   1877             else:
   1878                 raise

Exception: "dot.exe" not found in path.

这是一个removeClass包装器:

$.fn.queueAddClass = function(className) {
    this.queue('fx', function(next) {
        $(this).addClass(className);
        next();
    });
    return this;
};

现在你可以做这样的事情 - 等待1秒,添加$.fn.queueRemoveClass = function(className) { this.queue('fx', function(next) { $(this).removeClass(className); next(); }); return this; }; ,等待3秒,删除.error

.error

答案 3 :(得分:6)

jQuery的CSS操作没有排队,但您可以通过执行以下操作使其在'fx'队列中执行:

$('#div').delay(1000).queue('fx', function() { $(this).removeClass('error'); });

与调用setTimeout完全相同,但改为使用jQuery的队列机制。

答案 4 :(得分:3)

当然,如果你像这样扩展jQuery会更简单:

$.fn.addClassDelay = function(className,delay) {
    var $addClassDelayElement = $(this), $addClassName = className;
    $addClassDelayElement.addClass($addClassName);
    setTimeout(function(){
        $addClassDelayElement.removeClass($addClassName);
    },delay);
};

之后你可以像addClass一样使用这个函数:

$('div').addClassDelay('clicked',1000);

答案 5 :(得分:2)

延迟在队列上运行。据我所知,css操作(除了通过动画)没有排队。

答案 6 :(得分:1)

delay不适用于任何队列函数,因此我们应该使用setTimeout()

你不需要分开东西。您需要做的就是用setTimeOut方法包含所有内容:

setTimeout(function () {
    $("#div").addClass("error").delay(1000).removeClass("error");
}, 1000);

答案 7 :(得分:0)

试试这个:

function removeClassDelayed(jqObj, c, to) {    
    setTimeout(function() { jqObj.removeClass(c); }, to);
}
removeClassDelayed($("#div"), "error", 1000);

答案 8 :(得分:0)

尝试以下简单的箭头功能:

dialog?.window?.apply { requestFeature(Window.FEATURE_NO_TITLE); setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT)) setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT) }

答案 9 :(得分:0)

$("#div").addClass("error").show(0).delay(1000).removeClass("error");

稍后谢谢我。