2012-01-18 5 views
0

私はjQuery/JavaScriptで拡張および折りたたみシステムのセットアップを行っています。 DIVをクリックすると、DIV内の画像がその状態を変更します。しかし、そのDIVをもう一度クリックしたように見えると、イメージは元の状態に戻りません。それは別の状態に固執している。イメージは元のソースに戻りますOnClick?

注:別の「ITEM」をクリックすると、アコーディオン効果を作成するために同じページの複数のインスタンスにスクリプトがあり、以前選択されたDIVの元の状態に戻ります。ここで

はjsFiddleです:http://jsfiddle.net/4Dtd8/

はありがとうございました!

+0

コードにだけコメントあなたの '$'と 'jQuery'を交換する場合、あなたはそれが簡単に読むことを見つけることがあります。少なくとも、私のために従う方が簡単です(多くのjQueryを実行して、実際にそれらの言葉が私の注意をそらすのを見て)。 – Kekoa

+0

@Kekoa:すべてのjQueryステートメントをドル記号($)で始めると、競合の発生やエラーの余地がさらに増えます。各ステートメントの前にjQueryを使用することをお勧めします。 –

+0

'$ 'を使うプロトタイプのような別のライブラリをロードしない限り、競合は起こらないはずです。 http://docs.jquery.com/Using_jQuery_with_Other_Libraries – Kekoa

答えて

1

使用CSSその後、あなただけに.open.closedからアイテムのクラスを切り替えると、CSSがイメージを変える処理させることができます。h1タグの背景に画像を配置します。

jQuery('.item .expandacc').click(function() { 
    jQuery('.item .expandacc').not(this).removeClass("open").addClass("closed") 
     .siblings('.contentacc').slideUp('normal'); 
    jQuery(this).next('.contentacc').slideToggle('normal'); 
    jQuery(this).toggleClass("closed").toggleClass("open"); 
}); 

http://jsfiddle.net/petersendidit/4Dtd8/9/

1

それは別の状態で立ち往生だ理由は、この行ではありません。どんなにそれはであるべき状態

jQuery(this).find('img').attr('src','http://www.jornal.us/icons/expandIcon.jpg'); 

、これは画像のソースに影響を及ぼし、最終的なコードです。したがって、ソースは常にその行に指定されているものに設定されます。

+0

この問題を解決するにはどうすればよいですか?別のDIVクラスが選択された後も画像は元の状態に戻りますが、そのクラスが選択されている間は画像は代替状態に保たれますか?ありがとう! –

2

コンテンツの可視性を監視して、どのアイコンを表示するかを決定できます。

http://jsfiddle.net/4Dtd8/7/

jQuery('.item .expandacc').click(function() { 
    if (jQuery($(this).next('.contentacc').is(':visible')) { 
     jQuery('.expandacc h1 img').attr('src', 'http://www.novell.com/documentation/extend52/Docs/help/exteNd/books/GTRImages/expandIcon.png'); 
    } 
    else { 
     jQuery(this).find('img').attr('src', 'http://www.jornal.us/icons/expandIcon.jpg'); 
    } 
    jQuery('.item .expandacc').not(this).siblings('.contentacc').slideUp('normal'); 
    jQuery(this).siblings('.contentacc').slideToggle('normal'); 
}); 
+0

複数のクラスでは、私が撮影しているものをどのように達成するでしょうか?例:http://jsfiddle.net/4Dtd8/6/ –

+0

また、スライドアニメーションのために.is( ':visible')が常にtrueになると思います。 http://jsfiddle.net/skram/4Dtd8/8/ –

+1

@AaronBrewer - 次のコンテンツブロックのみをチェックするように 'next'を使います。 http:// jsfiddle。net/4Dtd8/7/ – mrtsherman

1

私は、それが展開または縮小し、その状態を見つけるために、値をチェックされている場合は、保存する画像タグのisExpanded attrのカスタムを追加しました。

DEMOここ

のjQuery( 'アイテム.expandacc。 '))(関数(){
jQueryの(この).siblings(' contentacc。 'をクリックslideToggle(' 正常');。。

var $img = jQuery(this).find('img'); 
    var isExpanded = $img.attr('isExpanded'); 

    // For some browsers, `isExpanded` is undefined; for others, 
    // `isExpanded` is false. Check for both. 
    if (typeof isExpanded === 'undefined' || 
      isExpanded === false || 
       isExpanded == 'true') { 
     $img.attr('src', 'http://www.jornal.us/icons/expandIcon.jpg'); 

     $img.attr('isExpanded', 'false'); 
    } else { 
     $img.attr('src', 'http://www.novell.com/documentation/extend52/Docs/help/exteNd/books/GTRImages/expandIcon.png'); 

     $img.attr('isExpanded', 'true'); 
    } 
関連する問題