带延迟的jQuery toggle类只能运行一次

时间:2013-02-14 20:46:52

标签: javascript jquery anonymous-function

在jQuery,匿名函数和延迟方面,我显然缺少一些基本的东西。

以下代码仅适用于每页加载ONCE(它将添加该类,然后在1秒后删除它,如果我再次单击,它将添加该类,但绝不会在页面持续时间内删除该类,除非我重新加载页面):

var jElement = $(currElem);
jElement.addClass("highlight")
.delay(1000)
.queue(function(){
$(this).removeClass("highlight");
});

然而,

如果我将(不存在的)函数调用作为参数添加,并且我在我的匿名函数中调用它,那么add / remove类组合将无限期地工作。

var jElement = $(currElem);
jElement.addClass("highlight")
.delay(1000)
.queue(function(randomFunction){
$(this).removeClass("highlight");
randomFunction(); //this makes it seemingly 'miraculously' work??
});

旁注:

var jElement = $(currElem);
jElement.addClass("highlight")
.delay(1000)
.queue(function(randomFunction){
$(this).removeClass("highlight");
// this does NOT work; if I dont actually call the 'randomFunction'
// so that function, even though it does nothing; must somehow cause 
// the implicit call of 'dequeue()' ??
});

2 个答案:

答案 0 :(得分:5)

那里没有奇迹。这种行为写在.queue()的文档中。

  

请注意,在添加 .queue() 的函数时,我们应确保最终调用 .dequeue() ,以便行中的下一个函数执行

$('#foo').slideUp().queue(function() {
  alert('Animation complete.');
  $(this).dequeue();
});
     

从jQuery 1.4 开始,被调用的函数将另一个函数作为第一个参数传递。调用时,会自动使下一个项目出列并使队列保持移动状态。我们按如下方式使用它:

$("#test").queue(function(next) {
    // Do some stuff...
    next();
});

答案 1 :(得分:2)

randomFunction实际上称为next,并引用.dequeue方法。调用它会导致队列继续到队列中的下一个项目。

http://api.jquery.com/queue/