2011-02-03 7 views
3

jQueryの.delay()メソッド(v 1.4.2)を使用して、次の.load()メソッドを遅延させようとすると、問題が発生しました。そのようjQuery - .load()を延期するために.delay()を使用していますか?

$('myElement').delay(500).load('myPage.php'); 

ちょうど().delayを無視しているようです。

私はevenutallyそうのような回避策を考え出した:それはエレガントではありません、

setTimeout(function(){ 
    $('myElement').load('myPage.php'); 
}, 500); 

しかし。他の誰かがこの問題にぶつかり、よりよい解決策を見つけましたか?

ありがとうございました。

+1

'.delayは()'だけで行われていない特定の要素にアニメーションを提供し、() ''のsetTimeoutに影響して、それに続く機能 – mVChr

答えて

13

load()(docs)メソッドが自動的にキューに入れられないため、delay()(docs)メソッドは無視されます。あなたがqueue()(docs)メソッドを使用して、キューにload()の呼び出しを追加する場合は、技術的に.delay()でそれを達成することができても

setTimeoutは、おそらくあなたの最良の選択肢です。

$('myElement').delay(500).queue(function(nxt) { 
    $(this).load('myPage.php'); 
    nxt(); 
}); 

機能がキューに追加されます。キューを解放するには、関数のパラメータを呼び出す必要があります。これを達成できる方法はdequeue()(docs)と呼ばれています。

+2

+1興味深い代替をキューを遅らせます。 – Orbling

+1

@Orbling:はい、良い点。別のキューを作成して、デフォルトキュー内のすべてのものが影響を受けないようにすることは可能です。このメソッドは、単純な 'setTimeout()'よりもオーバーヘッドを必要とし、私が見るどんな実際の利益ももたらさないので、代わりに 'setTimeout'を使います。 – user113716

+0

パトリックの優れた説明をいただきありがとうございます。 – AJB

3

あなたはjQueryのタイマーはあなたが

$('myElement').oneTime(500, function() { 
    $(this).load('myPage.php'); 
}); 
+0

チップPetahのおかげで、私はタイマーのプラグインについて知りませんでした。私はそれをつかみ、ちょっと遊んでいくつもりです。 – AJB

2

を行うことができますプラグインを使用する場合ここでは、その中に新しいコンテンツをロードし、その後、div要素をフェードアウトして、後ろにそれをフェージングに私のソリューションです。これは本当にAJAXのために便利です例えば検索結果を呼び出すための呼び出し。

$('.search').keyup(function(){ 
    var query= $(this).val(); 
    $('.results').fadeOut('300'); 
    setTimeout(function(){ 
     $('.results').load('search.php?search=' + query, function() { 
      $('.results').fadeIn('300'); 
     }) 
    }, 300); 
    return false; 
}); 
+0

それはそれです!ありがとうございました ! – Zl3n

+0

あなたは大歓迎です!あなたはそれが働いてうれしい!タイミングは常にjQueryの問題であり、setTimeoutは決して実際にはそれを実行しませんでした(特に、同時に複数のものを使用する場合、キューを持つものとそうでないものを使用する場合)。私は、アニメーションの時間を遅れとして使うことで、あなたは完全にコントロールでき、複数のものが同時に(または異なる時間に)「待っている」ことができると感じています。 –

関連する問題