26

タブ内でアコーディオンを使用すると問題が発生しました。最初は非アクティブなアコーディオンは、タブが選択されたときにコンテンツを正しくレンダリングしません。読んでみると、非アクティブなタブには最初に display:none が設定されているため、アコーディオン内の div の高さが正しく計算されないことが原因であることがわかります。提案された解決策はどれもうまくいきません。誰かがこれを克服したり、回避したりしましたか?

問題のコード例を次に示します。

<!DOCTYPE html>
<html>
<head>
  <link rel="stylesheet" type="text/css" href="../css/jquery-ui-1.7.2.custom.css" media="screen" />
  <script type='text/javascript' src='../scripts/jquery-1.3.2.min.js'></script>
  <script type='text/javascript' src='../scripts/jquery-ui-1.7.2.custom.js'></script> 

  <script type="text/javascript">
  $(document).ready(function(){
    $('#tabs').tabs();
    $("#accordion1").accordion();
    $("#accordion2").accordion(); 
  });
  </script>
</head>
<body style="font-size:62.5%;">
   <div id="main" class="round roundB">

<div id="tabs">
  <ul>
    <li><a href="#tab1">Tab 1</a> </li>      
    <li><a href="#tab2">Tab 2</a> </li>
  </ul>

<div id="tab1">
  <div id="accordion1">
 <h3><a href="#">Section 1</a></h3>
 <div>
  <p>
  TAB 1 Accordion 1
  </p>
 </div>
 <h3><a href="#">Section 2</a></h3>
 <div>
  <p>
  TAB 1 Accordion 2
  </p>
 </div>
  </div>
</div>

<div id="tab2">
  <div id="accordion2">
 <h3><a href="#">Section 1</a></h3>
 <div>
  <p>
  TAB 2 Accordion 1
  </p>
 </div>
 <h3><a href="#">Section 2</a></h3>
 <div>
  <p>
  TAB 2 Accordion 2
  </p>
 </div>
  </div>
</div>
</div>

</div>
</body>
</html>
4

7 に答える 7

57

以前も同じ問題がありました。解決策は次のとおりです。タブの前にアコーディオンをアクティブにする必要があります。

$("#accordion").accordion();
$("#tabs").tabs();

たぶん、左揃えが必要です。

.ui-accordion-header{
  text-align: left;
}

幸運を

于 2009-10-21T19:31:00.537 に答える
8

記載されている問題を読んだ後、私が遭遇した問題は同様の性質のものであるという印象を受けました。タブ内でアコーディオン機能を使用すると、アコーディオン コンテンツにスクロールバーが強制的に含まれるようになりましたが、これは私が望んでいない機能でした。

なんらかの理由で、提供されている現在のソリューションはうまくいきませんでした。

私が見つけた解決策は、autoHeightのデフォルトのアコーディオン設定を上書きすることでした(デフォルトはtrue、上書きはfalse)

$("#accordion").accordion({
    autoHeight: false
});
$('#tabs').tabs();
于 2010-09-01T21:08:15.653 に答える
1

タブをアクティブにしたときにアコーディオンを初期化します。

サンプル:

$('.selector').bind('tabsadd', function(event, ui) {
  ...
});

あなたのサンプル:

  <script type="text/javascript">
    $(document).ready(function(){
        $('#tabs').tabs();
    $('#tabs').bind('tabshow', function(event, ui) {
        $("#accordion1").accordion();
        $("#accordion2").accordion(); 
    });

  });
  </script>

タブごとに特別なすべてのアコーディオンを初期化する必要があるかもしれません。

または、最新の UI ライブラリを使用します。

    <link rel="stylesheet" href="http://static.jquery.com/ui/css/base2.css" type="text/css" media="all" />
        <link rel="stylesheet" href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.7.2/themes/ui-lightness/jquery-ui.css" type="text/css" media="all" />
        <link rel="stylesheet" href="http://static.jquery.com/ui/css/demo-docs-theme/ui.theme.css" type="text/css" media="all" />
        <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js" type="text/javascript"></script>
        <script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.7.2/jquery-ui.min.js" type="text/javascript"></script>
        <script src="http://jquery-ui.googlecode.com/svn/tags/latest/external/bgiframe/jquery.bgiframe.min.js" type="text/javascript"></script>
        <script src="http://jquery-ui.googlecode.com/svn/tags/latest/ui/minified/i18n/jquery-ui-i18n.min.js" type="text/javascript"></script>
于 2009-10-09T08:14:14.860 に答える
1

上記のどれも私にとってはうまくいきませんでした。私にとっての秘訣は、アコーディオンごとに一意の div ID を使用することから、すべてのアコーディオンを単一のクラス ID に変更することでした。つまり、変更: <div id="accordion1>, <div id="accordion2>,etc... を<div class="accordion">各タブ内に変更します。

$(document).ready 関数に追加する必要がある場合もあります

$(".accordion").accordion({
      autoHeight: false
  });

  $('#tabs').tabs();
  $('#tabs').bind('tabshow', function(event, ui) {
      $(".accordion").accordion("resize");
      });

したがって、形式は次のようになります。

<!DOCTYPE html>
<html>
<head>
  <link rel="stylesheet" type="text/css" href="../css/jquery-ui-1.7.2.custom.css" media="screen" />
  <script type='text/javascript' src='../scripts/jquery-1.3.2.min.js'></script>
  <script type='text/javascript' src='../scripts/jquery-ui-1.7.2.custom.js'></script> 

  <script type="text/javascript">
  $(document).ready(function()
  {
      $(".accordion").accordion({
            autoHeight: false
      });

      $('#tabs').tabs();
      $('#tabs').bind('tabshow', function(event, ui) {
          $(".accordion").accordion("resize");
      });
  });
  </script>
</head>
<body style="font-size:62.5%;">
<div id="tabs">
    <ul>
        <li><a href="#tabs-1">User</a></li>
        <li><a href="#tabs-2">Folders</a></li>
        <li><a href="#tabs-3">Decks</a></li>
    </ul>
    <div id="tabs-1">
        <div class='accordion'>
            <h3>Header 1</h3>
            <div</div>  
            <h3>Header 2</h3>
            <div></div> 
            <h3>Header 3</h3>
            <div><</div> 
        </div>
    </div>
    <div id="tabs-2">
        <div class='accordion'>
            <h3>Header 4</h3>
            <div</div>  
            <h3>Header 5</h3>
            <div></div> 
            <h3>Header 6</h3>
            <div><</div> 
        </div>
   </div>
   <div id="tabs-3">
        <div class='accordion'>
            <h3>Header 7</h3>
            <div</div>  
            <h3>Header 8</h3>
            <div></div> 
            <h3>Header 9</h3>
            <div><</div> 
        </div>  
   </div>
</div>

</body>
</html>
于 2013-10-28T14:24:13.723 に答える
1
    $( "#tabs" ).tabs({
        load: function(event, ui) {
            $("#"+ui.panel.id+" .accordians:first").accordion();
        }
    });

これは、タブで ajax html を使用する場合に機能しました。

于 2011-07-22T21:20:16.843 に答える
0

見る

http://bugs.jqueryui.com/ticket/5601

.ui-helper-clearfix { 表示:ブロック; 最小幅: 0; オーバーフロー: 非表示; }

于 2012-03-15T17:34:25.880 に答える
-1

よく読んでくださいhttp://docs.jquery.com/UI/Tabs# 答えがあります。それは最も簡単な方法です

于 2009-10-13T06:05:53.683 に答える