2011-12-16 2 views
1

HTMLjQuery - 子クラスをスクロールして1つの繰り返しでremoveclassを削除する方法setTimout not working?

<div id="slides"> 
    <div id="one">Slide 1</div> 
    <div id="two">Slide 2</div> 
    <div id="three">Slide 3</div> 
</div> 

CSS

#slides .show{ 
    display: block; 
} 
#slides div{ 
    display: none; 
} 

スクリプト

var slides = $('#slides').children(); 

var i = 0; 
function play(){ 
    $(slides[i]).addClass('show'); 
    setTimeout($(slides[i]).removeClass('show'), 500); /* does nothing */ 
    i++; 
    setTimeout(play, 3000); 
} 

play(); 

私はこれを持って、それが一つ一つのスライドを表示しますが、それはそれらを削除しません。 removeClassを実際に削除する前に1秒間待機するように設定する方法が不思議です。

http://jsfiddle.net/WbsxQ/6/

おかげ以下jsfiddleのリンクを更新しました!

+0

jsfiddleを設定できますか?あなたをそのように手助けするのは簡単かもしれません。 –

+0

私は '#carousel'が'#slides'を読むべきだと思います、いいえ? – graphicdivine

+0

はい#carouselはスライドを読むべきですoops私がここに投稿したときにコードを書き直しました – jshotz

答えて

1

のsetTimeoutはあなたのループを起動する場合があります長い時間前に終了しました。要素slides[i]をグローバル変数に入れてみてください(別の$は必要ありません)。

elementToHide = slides[i]; 
setTimeout(function(){elementToHide.removeClass('show')}, 500); 
+0

Thanks Litek !!それはうまくいきましたが、jQueryのセレクタでラップする必要がありましたが、うまくいきました! 'setTimeout(function(){$(theSlide).removeClass( 'show')}、500);' – jshotz

1

これは唯一のエラーかどうかわかりませんが、少なくともsetTimeoutには関数(または文字列ですが、そこには行かないでください)が必要です。文字列...あなたはドリフトを取得)...そう、

setTimeout(function() { $(slide[i]).removeClass('show') }, 500); 

(実際には変数に出てリファクタリング場合はきれいになりますが、contrtastを説明するために働くでしょう)

+0

私は 'setTimeout(function() {$(slide [i])。removeClass( 'show')}、500); 'そしてconsole.log(i)はそれを未定義として返します。 – jshotz

+0

@jshotz:なぜ結果が未定義で問題がありますか? –

+0

jsのフィドルリンクを確認してください。http://jsfiddle.net/WbsxQ/6/ – jshotz