8

jQueryの遅延機能を関数で動作させることができませんappend。なにが問題ですか?それを機能させる方法はありますか?setTimeout経験がなくても自分でメンテナンスするお客様にとって、より簡単にフォローできるようにするために、直接使用することは避けたいと思います。

私のコード:

$('#chatwindow').append('test').delay(2000).append('test');

このコードでは、'testtest' が同時に出力され、delay無視されます。

4

3 に答える 3

26

これは、デフォルトでキューをdelay(2000)キューに入れるためです。これは、の一部ではありません。fxappend()

append()代わりに、関数を使用して具体的にキューに入れることができますqueue()

$('#chatwindow').append('test').delay(2000).queue(function (next) {
    $(this).append('test');
    next();
});

ここでこれが機能する例を見ることができます。http://jsfiddle.net/mj8qC/

ただし、@ascii-limeのコメントには同意します。多くのユーザーを混乱させる(StackOverflowでの質問の経験から)setTimeoutとは異なり、JavaScriptはJavaScriptの基本的な部分であるため、お客様が理解する機会が増えることを期待しています。delay()

FWIW、この質問のきっかけで、 ;の使用法に関するブログ投稿を書くことになりました。delay()それはこの答えよりも詳細になり、他の人にとってはさらに読むのに役立つかもしれません。

于 2012-06-18T15:04:28.717 に答える
3

delay()トリッキーな関数で、何にも使用できません。主にエフェクト用に作成されています(すぐに返され、JavaScriptの実行フローをブロックしません)。

ドキュメントから:

標準のエフェクトキューまたはカスタムキューで使用できます

(したがって、fxキューを使用していない場合は、カスタムキューを使用する必要があります)

この場合、setTimeoutを使用します。

于 2012-06-18T15:04:08.043 に答える
1

はい。遅延からの復帰は即時です。あなたのコードには、リターンが待つべきであることを示唆するものは何もありません。エンジンが待機するには setTimeout を使用する必要があります。

于 2012-06-18T15:04:49.370 に答える