2009-06-02 18 views
8

jquery関数を使用すると、クリックするとdivが表示されるように設定されたタイムアウトが生成されます。setTimeout関数を設定時刻より前に終了する

しかし、settimeoutの長さの間に別のオプションが選択された場合は、この関数を破棄して何か他のことが起こっているのを知りたいと思います。

私の現在のコードは次のとおりです。

$(document).ready(function(){ 

$('li#contact').click(function() { 
     $('ul.image_display').css('display', 'none'); 
     $('ul.projects').fadeOut().hide(); 
     $('li#cv').removeClass('cur'); 
     $('li#projects').removeClass('cur'); 
     $('li#contact').addClass('cur'); 
     $('ul.contact').fadeIn(function() 
         { 
         setTimeout(function() 
         { 
         $('ul.contact').fadeOut('slow'); 
         }, 8000); 
         }); 
     setTimeout(function() { 
      $('li#contact').removeClass('cur'); 
      $('li#cv').addClass('cur'); 
      $('ul.projects').fadeIn('slow'); 
      $('ul.image_display').css('display', 'block'); 
      }, 8625); 

}); 

}); 

ビット面倒が、これがクリックされるまで動作します:

$(document).ready(function(){ 

$('#projects').click(function() { 
     $('li#cv').removeClass('cur'); 
     $('ul.contact').fadeOut().hide(); 
     $('#contact').removeClass('cur'); 
     $('ul.projects').fadeIn('slow'); 
     $('#projects').addClass('cur'); 
     $('ul.image_display').css('display', 'block'); 
}); 

}); 

第二は、クラスよりも最初の「curが」まだアップした直後にクリックされた場合on li#cv。

これは意味がありますか?

希望です!

+0

私はコードを吸うが、私はまだこの全体のjqueryのmalarkeyに新しいです知っている! – DanC

+0

ところでsetTimeoutはjavascript関数で、jQuery(あなたのタイトルに関する)とは関係ありません:) –

+0

おそらく私はそれについてjqueryのドキュメントで何かを見つけることができませんでした!乾杯、 – DanC

答えて

18

setTimeout関数は、そのタイムアウトに識別子を返します。 clearTimeout機能でそのタイムアウトをキャンセルすることができます。あなたはこのような何かを行うことができますので、(あなたのコードと空白を埋める):

var timer; 
$(function() { 
    $(...).click(function() { 
     ... 
     timer = setTimeout(...); 
     ... 
    }); 

    $(...).click(function() { 
     clearTimeout(timer); 
    }); 
}); 

それはしかし、このためにグローバル変数を維持するために、特にスーパークリーンではありません。あなたの状況に最も合った要素があれば、タイマーをdata属性に格納することができます。このような何か:

$(function() { 
    $(...).click(function() { 
     ... 
     var timer = setTimeout(...); 
     $(someelement).data('activetimer', timer); 
     ... 
    }); 

    $(...).click(function() { 
     var timer = $(someelement).data('activetimer'); 
     if(timer) { 
      clearTimeout(timer); 
      $(someelement).removeData('activetimer'); 
     } 
    }); 
}); 

それは本当にはクリーナーを見ていないが、それはタイマーを格納するための別の方法です...

+0

申し訳ありませんが、あなたは私のために少し精緻化できますか? これはコード内でどこに入りますか? – DanC

+1

タイムアウトを設定するときは、setTimeoutの戻り値を変数に保存します(例: "timer")。終了したいときは、 "timer"でclearTimeout()を呼び出すことができます。これにより、差し迫ったイベントがキャンセルされます。タイムアウトイベントが発生する前に起こることはありません。タイムアウトイベントが起こらないようにするため、タイムアウトに入ったコードが別の方法で実行されるようにプログラムする必要があります。 – Hober

+0

恐ろしい!これは素晴らしい作品です!助けを応援! – DanC

3

あなたはそれを行うためにclearTimeout()を使用することができます。変数のsetTimeout()の戻り値をclearTimeout()に渡す必要があります。

+0

クール、ヘルプメイトのための喝采! – DanC

関連する問題