2011-02-01 7 views
11

アコーディオンを作成しようとしていますが、ここで1回のクリックですべてのセクションを展開/折りたたむことができます。私はまた、ユーザーが一度に0-nセクションを開いているセクションを開いたり閉じたりできるようにする必要があります。ここでstackoverflowとjqueryフォーラムでの議論のいくつかを使用して、私が思い付いた解決策は次のとおりです。 各セクションは独自のaccordionとして実装されています。各セクションはcollapsible = trueに設定されています。私は開いているセクションの見出しをクリックするとjquery ui accordion - 複数のアコーディオンがすべてのスタイルの問題を展開/折りたたむ

<html> 
    <head> 
     <title>Accordion Test</title> 

     <script type="text/javascript" src="../scripts/jquery-1.4.2.min.js"></script> 
     <script type="text/javascript" src="../scripts/jquery-ui-1.8.4.custom.min.js"></script> 

     <link rel="stylesheet" href="../_templates/css/jquery-ui-1.8.6.custom.css" type="text/css" /> 
     <link rel="stylesheet" href="../_templates/css/jquery.ui.accordion.css" type="text/css" /> 
    </head> 

<body> 
     <a onClick="expandAll()">Expand All</a> 
     <br> 
     <a onClick="collapseAll()">Collapse All</a> 
      <div id="accordion1" class="accord"> 
      <h5><a href="#">section 1</a></h5> 
      <div> 
        section 1 text 
      </div> 
      </div> 

      <!-- orders section --> 
      <div id="accordion2" class="accord"> 
      <h5><a href="#">section 2</a></h5> 
      <div> 
        section 2 text 
      </div> 
      </div> 

      <!-- section 3 --> 
      <div id="accordion3" class="accord"> 
      <h5><a href="#">section 3</a></h5> 
      <div> 
        section 3 text 
      </div> 
      </div> 

      <!-- section 4 --> 
      <div id="accordion4"> 
      <h5><a href="#">section 4</a></h5> 
      <div> 
        section 4 text     
      </div> 
      </div> 


</body> 
</html> 


<script type="text/javascript"> 

$(function() { 
    $('#accordion1').accordion({ 
     header: 'h5', 
     collapsible: true, 
     autoHeight: false 
    }); 
}); 
$(function() { 
    $('#accordion2').accordion({ 
     header: 'h5', 
     collapsible: true, 
     autoHeight: false, 
     active: false 
    }); 
}); 
$(function() { 
    $('#accordion3').accordion({ 
     header: 'h5', 
     collapsible: true, 
     autoHeight: false, 
     active: false 
    }); 
}); 
$(function() { 
    $('#accordion4').accordion({ 
     header: 'h5', 
     collapsible: true, 
     autoHeight: false, 
     active: false 
    }); 
}); 

</script> 

<script type="text/javascript"> 
$(document).ready(function() { 

}) 

function expandAll() { 
    alert("calling expandAll"); 
    $("#accordion1, #accordion2, #accordion3, #accordion4") 
     .filter(":not(:has(.ui-state-active))") 
     .accordion("activate", 0); 
} 

function collapseAll() { 
    alert("calling collapseAll"); 
    $("#accordion1, #accordion2, #accordion3, #accordion4") 
     .filter(":has(.ui-state-active)") 
     .accordion("activate", -1); 
} 

</script> 

私はに実行している問題は、予想通り、セクションが折りたたまれているが、ヘッダはまだ私まで、「UI-状態フォーカス」クラスを持っていますページの他の場所をクリックしてください。だから私が見ているのは、ちょうど閉じられたセクションのヘッダーが、私が他の場所をクリックするまで、ホバー効果と同じ背景色を持ち、「デフォルトの、焦点が合っていない」色に移動するということです。

また、[すべて折りたたむ]リンクを使用すると、すべてFirefoxでうまく表示されます。 IEでは、最後のセクションヘッダーに同じホバーフォーカスの色付けがあります。

提案がありますか?閉じたときにアコーディオンがフォーカスを失うように強制する必要がありますか?どうすればそれを達成できますか?

+0

これは、1つのアコーディオンのためのソリューションではありません。サンプルでは、​​複数のアコーディオンが使用されています。 – jmav

答えて

3

ページ上でjquery-uiスタイルをオーバーライドして、ui-state-focusクラスを削除するためにアコーディオンのjavascriptをハックしようとすると、簡単な解決策が明らかになりました。

ページ上のどこかをクリックすると、私のページが期待される動作を表示しているので、私はblur()を使ってフォーカスを失いました。

$(document).ready(function() { 
    // forces lose focus when accordion section closed. IE and FF. 
    $(".ui-accordion-header").click(function(){ 
      $(this).blur(); 
     }); 

}) 

IEでのすべての問題を解決するには、collapseAll()メソッドに1行追加しました。

function collapseAll() { 
    alert("calling collapseAll"); 
    $("#accordion1, #accordion2, #accordion3, #accordion4") 
     .filter(":has(.ui-state-active)") 
     .accordion("activate", -1); 
    $(".ui-accordion-header").blur(); 
} 
3

すべての開いたパネルでアコーディオンを実装するソリューション。パネルは静的であり、閉じられません。

アコーディオンウィジェットでaccordion divを初期化しないでください!

$("#accordion").addClass("ui-accordion ui-widget ui-helper-reset") 
    .find('h3') 
    .addClass("current ui-accordion-header ui-helper-reset ui-state-active ui-corner-top") 
    .prepend('<span class="ui-icon ui-icon-triangle-1-s"/>') 
    .next().addClass("ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content-active"); 
2

これが私の答えです〜複数のためにその助け

は、あなただけのオプションbeforeActivateに追加し、既存のjqueryのUIを使用して、このように行うことができます開くを願っ:以下

私のコード:

jQuery UI accordion that keeps multiple sections open?

とFU:

$("#accordion").accordion({ 
     header: "> div > h3", 
     autoHeight: false, 
     collapsible: true, 
     active: false, 
     beforeActivate: function(event, ui) { 
      // The accordion believes a panel is being opened 
      if (ui.newHeader[0]) { 
       var currHeader = ui.newHeader; 
       var currContent = currHeader.next('.ui-accordion-content'); 
      // The accordion believes a panel is being closed 
      } else { 
       var currHeader = ui.oldHeader; 
       var currContent = currHeader.next('.ui-accordion-content'); 
      } 
      // Since we've changed the default behavior, this detects the actual status 
      var isPanelSelected = currHeader.attr('aria-selected') == 'true'; 

      // Toggle the panel's header 
      currHeader.toggleClass('ui-corner-all',isPanelSelected).toggleClass('accordion-header-active ui-state-active ui-corner-top',!isPanelSelected).attr('aria-selected',((!isPanelSelected).toString())); 

      // Toggle the panel's icon 
      currHeader.children('.ui-icon').toggleClass('ui-icon-triangle-1-e',isPanelSelected).toggleClass('ui-icon-triangle-1-s',!isPanelSelected); 

      // Toggle the panel's content 
      currContent.toggleClass('accordion-content-active',!isPanelSelected)  
      if (isPanelSelected) { currContent.slideUp('fast'); } else { currContent.slideDown('fast'); } 

      return false; // Cancels the default action 
     } 
    }); 

から参照してください。 nctionの崩壊とあなたがこの小さな、軽量のプラグインを試すことができます。..

+0

非常に良い解決策!いいね!よくやった! –

0

をそれだ

function accordion_expand_all() 
{ 
    var sections = $('#accordion').find("h3"); 
    sections.each(function(index, section){ 
    if ($(section).hasClass('ui-state-default') && !$(section).hasClass('accordion-header-active')) { 
     $(section).click(); 
    } 
    }); 

} 

function accordion_collapse_all() 
{ 
    var sections = $('#accordion').find("h3"); 
    sections.each(function(index, section){ 
    if ($(section).hasClass('ui-state-active')) { 
     $(section).click(); 
    } 
    }); 
} 

を展開します。

私たちの要件に応じて変更できるオプションはほとんどありません。

URLは:http://accordion-cd.blogspot.com/

関連する問題