Jquery accordion nested link crashes the parent link

36 Views Asked by At

The problem is when we click E4. Before even showing it's submenus E4I and E4II, the parent of E4 which is E closes automatically.

Does jQueryUI support nested accordions? The design primarily was using Bootstrap accordion, but later received a requirement that requires the DOM elements to be generated dynamically.

$("ul#testJ").accordion({
  collapsible: true,
  active: false,
  heightStyle: "content",
  header: "a.header"
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="http://code.jquery.com/ui/1.10.0/jquery-ui.js"></script>
<ul id="testJ">
  <li>
    <a href="#"><i class="fa fa-home"></i> &nbsp;&nbsp;A</a>
  </li>
  <li>
    <a class="header" href="#"><i class="fa fa-shopping-cart"></i> &nbsp;&nbsp;B</a>
    <ul>
      <li><a href="#">B1</a></li>
      <li><a href="#">B2</a></li>
      <li><a href="#">B3</a></li>
      <li><a href="#">B4</a></li>
    </ul>
  </li>
  <li>
    <a class="header" href="#"><i class="fa fa-clipboard"></i> &nbsp;&nbsp;&nbsp;C</a>
    <ul>
      <li><a href="#">C1</a></li>
      <li><a href="#">C2</a></li>
      <li><a href="#">C3</a></li>
    </ul>
  </li>
  <li>
    <a class="header" href="#"><i class="fa fa-box"></i> &nbsp;&nbsp;D</a>
    <ul>
      <li><a href="#">D1</a></li>
      <li><a href="#">D2</a></li>
    </ul>
  </li>
  <li>
    <a class="header" href="#"><i class="fa fa-chart-pie"></i> &nbsp;&nbsp;E</a>
    <ul>
      <li><a href="#">E1</a></li>
      <li><a href="#">E2</a></li>
      <li><a href="#">E3</a></li>
      <li>
        <a class="header" href="#">E4</a>
        <ul>
          <li><a href="#">E4I</a></li>
          <li><a href="#">E4II</a></li>
        </ul>
      </li>
      <li><a href="#">E5</a></li>
      <li><a href="#">E6</a></li>
      <li><a href="#">E7</a></li>
    </ul>
  </li>
  <li>
    <a class="header" href="#"><i class="fa fa-truck"></i> &nbsp;F</a>
  </li>
  <li>
    <a class="header" href="#"><i class="fa fa-user"></i> &nbsp;&nbsp;G</a>
    <ul>
      <li><a href="#">G1</a></li>
      <li><a href="#">G2</a></li>
    </ul>
  </li>
</ul>

1

There are 1 best solutions below

0
Thamjith Thaha On BEST ANSWER

So the problem is with using header on nested Accordion. I found this solution at https://bugs.jqueryui.com/ticket/9020.

$("ul.testJ").accordion({
  collapsible: true,
  active: false,
  heightStyle: "content",
  header: "> li>a:not(.header)"
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="http://code.jquery.com/ui/1.10.0/jquery-ui.js"></script>
<ul class="testJ">
  <li>
    <a class="header" href="#"><i class="fa fa-home"></i> &nbsp;&nbsp;A</a>
  </li>
  <li>
    <a href="#"><i class="fa fa-shopping-cart"></i> &nbsp;&nbsp;B</a>
    <ul>
      <li><a class="header" href="#">B1</a></li>
      <li><a class="header" href="#">B2</a></li>
      <li><a class="header" href="#">B3</a></li>
      <li><a class="header" href="#">B4</a></li>
    </ul>
  </li>
  <li>
    <a href="#"><i class="fa fa-clipboard"></i> &nbsp;&nbsp;&nbsp;C</a>
    <ul>
      <li><a class="header" href="#">C1</a></li>
      <li><a class="header" href="#">C2</a></li>
      <li><a class="header" href="#">C3</a></li>
    </ul>
  </li>
  <li>
    <a href="#"><i class="fa fa-box"></i> &nbsp;&nbsp;D</a>
    <ul>
      <li><a class="header" href="#">D1</a></li>
      <li><a class="header" href="#">D2</a></li>
    </ul>
  </li>
  <li>
    <a href="#"><i class="fa fa-chart-pie"></i> &nbsp;&nbsp;E</a>
    <ul class="testJ">
      <li><a class="header" href="#">E1</a></li>
      <li><a class="header" href="#">E2</a></li>
      <li><a class="header" href="#">E3</a></li>
      <li>
        <a href="#">E4</a>
        <ul>
          <li><a class="header" href="#">E4I</a></li>
          <li><a class="header" href="#">E4II</a></li>
        </ul>
      </li>
      <li><a class="header" href="#">E5</a></li>
      <li><a class="header" href="#">E6</a></li>
      <li><a class="header" href="#">E7</a></li>
    </ul>
  </li>
  <li>
    <a class="header" href="#"><i class="fa fa-truck"></i> &nbsp;F</a>
  </li>
  <li>
    <a href="#"><i class="fa fa-user"></i> &nbsp;&nbsp;G</a>
    <ul>
      <li><a class="header" href="#">G1</a></li>
      <li><a class="header" href="#">G2</a></li>
    </ul>
  </li>
</ul>