0

liファンシーな効果で与えられたに要素を追加するそのようなコードがありul、その動作がその子の数に依存する関数を呼び出しますul:

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

...

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

問題は、 が呼び出されたときに、効果が完全に実行されていないためtoggleIfNeeded、 newがまだ存在していないように見えることです。liエフェクトを削除すると、正しく機能します。

どうやってやるの ?ある種のタイマーが必要だと思いますが、それは非同期である(ファンシーな効果のためにアプリをブロックしたくない)か、「効果が実行されたときにその関数を呼び出す」ことを伝える方法です。

効果が関係しない他のコンテキストでコードを呼び出すことができるため、上記を変更する可能性はありません10

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('<effect>', callbackFunction)
于 2013-03-01T13:45:43.787 に答える
1

show() の 2 番目のパラメーターは、アニメーションの終了時に必要なことを実行できる関数にすることができます

于 2013-03-01T13:42:31.063 に答える