3

jQuery、無名関数、および遅延に関しては、明らかに根本的なことが欠けています。

次のコードは、ページの読み込みごとに 1 回だけ機能します (クラスが追加され、1 秒後に削除されます。もう一度クリックすると、クラスが追加されますが、ページの期間中はクラスが削除されることはありません。ページをリロードします):

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

でも、

(存在しない) 関数呼び出しをパラメーターとして追加し、それを匿名関数で呼び出すと、クラスの追加/削除の組み合わせが無期限に機能します。

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()' ??
});
4

2 に答える 2

5

そこに奇跡はありません。この動作は のドキュメントに書かれています.queue()

で関数を追加するときは、が最終的に呼び出されて、行の次の関数が実行されるように.queue()する必要があることに注意してください。.dequeue()

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

jQuery 1.4 の時点で、呼び出された関数には、最初の引数として別の関数が渡されます。呼び出されると、これは自動的に次のアイテムをデキューし、キューを動かし続けます。次のように使用します。

$("#test").queue(function(next) {
    // Do some stuff...
    next();
});
于 2013-02-14T20:50:53.860 に答える
2

これrandomFunctionは実際にはメソッドと呼ばれnext、メソッドを参照し.dequeueます。これを呼び出すと、キューはキュー内の次のアイテムに進みます。

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

于 2013-02-14T20:50:06.993 に答える