0

我有那种代码可以将li元素附加到具有奇特效果的给定元素上ul,然后我调用一个函数,其行为取决于 that 的子元素数ul

$(li).hide().appendTo("#ul-authors").show("blind");
toggleIfNeeded();

...

function toggleIfNeeded() {
  if ($("#ul-authors > li").length === 1) {
     doSomething();
  } else {
     doSomethingElse();
  }
}

问题是,当toggleIfNeeded被调用时,新的li似乎还不存在,因为效果并没有完全执行。如果我删除效果,它可以正常工作。

我怎样才能做到这一点 ?我想我需要某种计时器,但这将是异步的(我不想阻止应用程序以获得奇特的效果),或者更好的是告诉“在执行效果时调用该函数”的方式。

1由于可以在不涉及任何效果的其他上下文中调用代码,因此我无法更改0上述内容。

4

3 回答 3

3

您可以将回调传递给.show(). 如果你改变

$(li).hide().appendTo("#ul-authors").show("blind");
toggleIfNeeded();

$(li).hide().appendTo("#ul-authors").show("blind", toggleIfNeeded);

那么你的函数将在动画完成时自动调用。

于 2013-03-01T13:41:40.673 回答
1

show() 的第二个参数可以是一个函数,你可以在动画结束时做你想做的事情

于 2013-03-01T13:42:31.063 回答
1

试试这个

.show('<effect>', callbackFunction)
于 2013-03-01T13:45:43.787 回答