Lucky500
Lucky500

Reputation: 507

Close dropdown menu when clicking sibling

I have been having issues in trying to make this work.

I have this submenu, that I would like to click its sibling ul, when I click in its sibling.

I have researched here and tried couple things to no avail.

this is what my code is looking like now, the toggle is working fine:

if ( $(window).width() < 740) { 
        $('.submenu').click(function(e){
             e.stopPropagation();
            e.preventDefault();
            var el = (e.target || e.srcElement);
            var $this = $(this);

            $(el).siblings('ul').slideToggle();
            $(el).siblings('ul').addClass('activeState');
            if( $this.siblings().hasClass('activeState')){
                $this.slideUp();
            }
            $(el).find('span').toggleClass('bg-arrow-down bg-arrow-up');
        });
    }

and this is more or less, what my HTML looks like. it has various submenus, and these are the menus that I am trying to make it work.

<div class="panel panel-default">
            <!-- <div class="nav-item-container"> -->
                <div class="panel-heading head-category">
                    <div class="panel-title">
                        <span><a href="http://www.yahoo.com">Products</a></span>
                        <a data-toggle="collapse" href="#menuPanelListGroup">
                                <i class="pull-right fa fa-chevron-down" aria-hidden="true"></i>
                        </a>
                    </div>
                </div>
                <ul class="list-group collapse out" id="menuPanelListGroup">
                    <li class="list-group-item children-list-group">
                        <a data-toggle="collapse" href="#menuPanelSubListGroup">
                            <span>Item 1</span>
                            <b class="pull-right glyphicon glyphicon-chevron-right"></b>
                        </a>

                        <ul id="menuPanelSubListGroup" class="collapse children-list-sublink">
                            <li class="list-group-item children-list-group">
                                <span><a href="#">SubItem 1</a></span>
                            </li>
                            <li class="list-group-item children-list-group">
                                <span>SubItem 2</span>
                            </li>
                            <li class="list-group-item children-list-group">
                                <span>SubItem 3</span>
                            </li>
                        </ul>

                    </li>
                    <li class="list-group-item children-list-group">
                        <span>Item 2</span>
                        <b class="pull-right glyphicon glyphicon-chevron-right"></b>
                    </li>
                    <li class="list-group-item children-list-group">
                        <span>Item 3</span>
                        <b class="pull-right glyphicon glyphicon-chevron-right"></b>
                    </li>
                    <li class="list-group-item children-list-group">
                        <span>Item 4</span>
                        <b class="pull-right glyphicon glyphicon-chevron-right"></b>
                    </li>
                    <li class="list-group-item children-list-group">
                        <span>Item 5</span>
                        <b class="pull-right glyphicon glyphicon-chevron-right"></b>
                    </li>
                </ul>
            <!-- </div> -->

            <!-- <div class="nav-item-container"> -->
                <div class="panel-heading head-category">
                    <div class="panel-title">
                        <span><a href="#">Latin Markets</a></span>              
                        <a data-toggle="collapse" href="#menu2PanelListGroup">
                            <i class="pull-right fa fa-chevron-down" aria-hidden="true"></i>
                        </a>
                    </div>
                </div>
                <ul class="list-group collapse out" id="menu2PanelListGroup">
                    <li class="list-group-item children-list-group">
                        <a data-toggle="collapse" href="#menu2PanelSubListGroup">
                            <span>Item 1</span>
                            <b class="pull-right glyphicon glyphicon-chevron-right"></b>
                        </a>

                        <ul id="menu2PanelSubListGroup" class="collapse children-list-sublink">
                            <li class="list-group-item children-list-group">
                                <span><a href="#">SubItem 1</a></span>
                            </li>
                            <li class="list-group-item children-list-group">
                                <span>SubItem 2</span>
                            </li>
                            <li class="list-group-item children-list-group">
                                <span>SubItem 3</span>
                            </li>
                        </ul>

                    </li>
                    <li class="list-group-item children-list-group">
                        <span>Item 2</span>
                        <b class="pull-right glyphicon glyphicon-chevron-right"></b>
                    </li>
                    <li class="list-group-item children-list-group">
                        <span>Item 3</span>
                        <b class="pull-right glyphicon glyphicon-chevron-right"></b>
                    </li>
                    <li class="list-group-item children-list-group">
                        <span>Item 4</span>
                        <b class="pull-right glyphicon glyphicon-chevron-right"></b>
                    </li>
                    <li class="list-group-item children-list-group">
                        <span>Item 5</span>
                        <b class="pull-right glyphicon glyphicon-chevron-right"></b>
                    </li>
                </ul>
            <!-- </div> -->

            <!-- <div class="nav-item-container"> -->
                <div class="panel-heading head-category">
                    <div class="panel-title">
                        <span><a href="#">Shows</a></span>
                        <a data-toggle="collapse" href="#tradeshowPanelListGroup">
                                <i class="pull-right fa fa-chevron-down" aria-hidden="true"></i>
                        </a>
                    </div>
                </div>
                <ul class="list-group collapse out" id="tradeshowPanelListGroup">
                    <li class="list-group-item children-list-group">
                        <a data-toggle="collapse" href="#tradeshowPanelSubListGroup">
                            <span>Item 1</span>
                            <b class="pull-right glyphicon glyphicon-chevron-right"></b>
                        </a>

                        <ul id="tradeshowPanelSubListGroup" class="collapse children-list-sublink">
                            <li class="list-group-item children-list-group">
                                <span><a href="#">SubItem 1</a></span>
                            </li>
                            <li class="list-group-item children-list-group">
                                <span>SubItem 2</span>
                            </li>
                            <li class="list-group-item children-list-group">
                                <span>SubItem 3</span>
                            </li>
                        </ul>

                    </li>
                    <li class="list-group-item children-list-group">
                        <span>Item 2</span>
                        <b class="pull-right glyphicon glyphicon-chevron-right"></b>
                    </li>
                    <li class="list-group-item children-list-group">
                        <span>Item 3</span>
                        <b class="pull-right glyphicon glyphicon-chevron-right"></b>
                    </li>
                    <li class="list-group-item children-list-group">
                        <span>Item 4</span>
                        <b class="pull-right glyphicon glyphicon-chevron-right"></b>
                    </li>
                    <li class="list-group-item children-list-group">
                        <span>Item 5</span>
                        <b class="pull-right glyphicon glyphicon-chevron-right"></b>
                    </li>
                </ul>

Just that if statement is not working.

Upvotes: 0

Views: 665

Answers (1)

Snowmonkey
Snowmonkey

Reputation: 3761

Not sure where you're not seeing that happen -- if you are taking window width to be window width, it may or may not be. Code below is working fine, and I've added a maxWidth value rather than hard-coding the 740 you were using.

I guess the question is, what are you trying to accomplish? When the width is over 740, style it differently? Maybe you want to look at CSS media types?

So you asked about toggling classes. The issue is, the right/down arrows are on a descendant of the clicked node. I've made it work, see below.

$(document).ready(function() {
  // set a default minimum width
  var minWidth = 740;
  // Is the viewport no wider than my min?
  if ($(window).width() < minWidth) {
    // If so, go ahead and hide all submenus
    var myMenu = $(".panel");
    myMenu.find("li:has('ul')").on("click", function(evt) {
      // click on any LI that contains
      //  nested UL's, show the child ul
      //  and hide all of this LI's sibling's
      //  children's nested ULs.
      evt.preventDefault();
      evt.stopPropagation();

      $(this).children("span")
        .toggleClass("glyphicon glyphicon--chevron-right")
        .toggleClass("glyphicon glyphicon-chevron-down");
      $(this).children("ul").slideToggle();

      $(this).siblings(":has(ul:visible)")
        .children("span")
        .toggleClass("glyphicon glyphicon--chevron-right")
        .toggleClass("glyphicon glyphicon-chevron-down");
      $(this).siblings().find("ul:visible").slideUp();

    }).prepend("<span class='glyphicon glyphicon-chevron-right'>").children("ul").hide();
    // The above line actually hides all the nested
    //  ULs initially.
  }
})
ul {
  list-style-type: none;
}
<link href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet" />
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="panel panel-default">
  <!-- <div class="nav-item-container"> -->
  <ul>
    <li class="panel-title panel-heading head-category">
      <span><a href="http://www.yahoo.com">Products</a></span>
      <a data-toggle="collapse" href="#menuPanelListGroup">
        <i class="pull-right fa fa-chevron-down" aria-hidden="true"></i>
      </a>
      <ul class="list-group collapse out" id="menuPanelListGroup">
        <li class="list-group-item children-list-group">
          <a data-toggle="collapse" href="#menuPanelSubListGroup">
            <span>Item 1</span>
            <b class="pull-right glyphicon glyphicon-chevron-right"></b>
          </a>

          <ul id="menuPanelSubListGroup" class="collapse children-list-sublink">
            <li class="list-group-item children-list-group">
              <span><a href="#">SubItem 1</a></span>
            </li>
            <li class="list-group-item children-list-group">
              <span>SubItem 2</span>
            </li>
            <li class="list-group-item children-list-group">
              <span>SubItem 3</span>
            </li>
          </ul>

        </li>
        <li class="list-group-item children-list-group">
          <span>Item 2</span>
          <b class="pull-right glyphicon glyphicon-chevron-right"></b>
        </li>
        <li class="list-group-item children-list-group">
          <span>Item 3</span>
          <b class="pull-right glyphicon glyphicon-chevron-right"></b>
        </li>
        <li class="list-group-item children-list-group">
          <span>Item 4</span>
          <b class="pull-right glyphicon glyphicon-chevron-right"></b>
        </li>
        <li class="list-group-item children-list-group">
          <span>Item 5</span>
          <b class="pull-right glyphicon glyphicon-chevron-right"></b>
        </li>
      </ul>
      <!-- </div> -->
    </li>

    <li class="panel-title panel-heading head-category">
      <span><a href="#">Latin Markets</a></span>
      <a data-toggle="collapse" href="#menu2PanelListGroup">
        <i class="pull-right fa fa-chevron-down" aria-hidden="true"></i>
      </a>
      <ul class="list-group collapse out" id="menu2PanelListGroup">
        <li class="list-group-item children-list-group">
          <a data-toggle="collapse" href="#menu2PanelSubListGroup">
            <span>Item 1</span>
            <b class="pull-right glyphicon glyphicon-chevron-right"></b>
          </a>

          <ul id="menu2PanelSubListGroup" class="collapse children-list-sublink">
            <li class="list-group-item children-list-group">
              <span><a href="#">SubItem 1</a></span>
            </li>
            <li class="list-group-item children-list-group">
              <span>SubItem 2</span>
            </li>
            <li class="list-group-item children-list-group">
              <span>SubItem 3</span>
            </li>
          </ul>

        </li>
        <li class="list-group-item children-list-group">
          <span>Item 2</span>
          <b class="pull-right glyphicon glyphicon-chevron-right"></b>
        </li>
        <li class="list-group-item children-list-group">
          <span>Item 3</span>
          <b class="pull-right glyphicon glyphicon-chevron-right"></b>
        </li>
        <li class="list-group-item children-list-group">
          <span>Item 4</span>
          <b class="pull-right glyphicon glyphicon-chevron-right"></b>
        </li>
        <li class="list-group-item children-list-group">
          <span>Item 5</span>
          <b class="pull-right glyphicon glyphicon-chevron-right"></b>
        </li>
      </ul>
      <!-- </div> -->
    </li>


    <li class="panel-title panel-heading head-category">
      <span><a href="#">Shows</a></span>
      <a data-toggle="collapse" href="#tradeshowPanelListGroup">
        <i class="pull-right fa fa-chevron-down" aria-hidden="true"></i>
      </a>
      <ul class="list-group collapse out" id="tradeshowPanelListGroup">
        <li class="list-group-item children-list-group">
          <a data-toggle="collapse" href="#tradeshowPanelSubListGroup">
            <span>Item 1</span>
            <b class="pull-right glyphicon glyphicon-chevron-right"></b>
          </a>

          <ul id="tradeshowPanelSubListGroup" class="collapse children-list-sublink">
            <li class="list-group-item children-list-group">
              <span><a href="#">SubItem 1</a></span>
            </li>
            <li class="list-group-item children-list-group">
              <span>SubItem 2</span>
            </li>
            <li class="list-group-item children-list-group">
              <span>SubItem 3</span>
            </li>
          </ul>

        </li>
        <li class="list-group-item children-list-group">
          <span>Item 2</span>
          <b class="pull-right glyphicon glyphicon-chevron-right"></b>
        </li>
        <li class="list-group-item children-list-group">
          <span>Item 3</span>
          <b class="pull-right glyphicon glyphicon-chevron-right"></b>
        </li>
        <li class="list-group-item children-list-group">
          <span>Item 4</span>
          <b class="pull-right glyphicon glyphicon-chevron-right"></b>
        </li>
        <li class="list-group-item children-list-group">
          <span>Item 5</span>
          <b class="pull-right glyphicon glyphicon-chevron-right"></b>
        </li>
      </ul>
    </li>
  </ul>
</div>

Upvotes: 1

Related Questions