2012-03-09 10 views
1

setTimeoutの代わりにdelay jQuery関数を使用して数秒後にフィールドメッセージをクリアするにはどうすればよいですか?以下のコードはすぐに値をクリアします。メッセージをクリアするjQuery delay setTimeout

var $this = $(this), 
      mid = $this.find("#emid"), 
      contents = $this.find("#equestion");  

    if(contents.length<30){ 
     contents.css('color','red') 
     .val('Error Message') 
     .delay(5000) 
     .val(''); 
     } 
+1

'setTimeout'がここにneatestオプションです。 –

+2

できません。 '.delay'はアニメーション用です。 'setTimeout'は基本的に他のすべてのものです。私は '.delay'も' setTimeout'を内部的に使っていると確信しています。興味深いもの: – pimvdb

答えて

4

UPD:実際には、あなたは、単にデフォルトのキューを使用することができ、自由に連鎖効果(showなど)と非-effects(valのように)

$("input") 
    .queue(function() { $(this).val("blah").dequeue() }) 
    .delay(1000) 
    .queue(function() { $(this).val("").dequeue() }) 
    .fadeOut(1000) // etc 

http://jsfiddle.net/cA4jB/1/

/UPDは

いいえ、あなたがする必要はありません(実際にはならない)のsetTimeoutを使用します。dequeueコール - ジャストqueueで、後者を包みます。 jQueryには、queueと呼ばれる組み込みの便利なメカニズムが用意されています。基本的な考え方は、このようなものです:あなたは、というキュー内の関数や遅延を「収集」:

$(elem).queue("queueName", function(next) { do something and call next() }); 
$(elem).queue("queueName", function(next) { do something else and call next() }); 
$(elem).delay(3000, "queueName"); 
$(elem).queue("queueName", function(next) { do something else and call next() }); 

して、処理を開始するdequeue()を呼び出します。

$(elem).dequeue("queueName") 

キュー内の各機能が次々と呼ばれています別のものと遅れが予想どおりに機能します。アクションで

http://jsfiddle.net/cA4jB/

+0

私はこれが大好きです、意味があります、ありがとう。 – Codex73

+0

@ Codex73:実際には、ソリューションはさらに簡単です。私は投稿を更新しました。 – georg

2

これはちょっと難しいですが、値をクリアするコールバックを使用して、ほとんど何もしないアニメーションを作成できます。

if(contents.length<30){ 
    contents.css('color','red') 
     .val('Error Message').animate({ 
      opacity: 1 
     }, 5000, function() { 
      contents.val(''); 
     }); 
} 

最良の方法は、setTimeoutを

4

jQueryのドキュメントは明確に

.delay()メソッドは、キューに入れられたjQueryの 効果の間遅延させるために最善であることを述べて使用することがまだあります。制限されているため、たとえば、 の遅延をキャンセルする方法はありません.Delay()は、JavaScriptのネイティブ setTimeout関数の代わりに使用されています。 のケースではより適切です。だから、

http://api.jquery.com/delay/

、その優れたsetTimeout関数を使用する

https://developer.mozilla.org/en/DOM/window.setTimeout