jQuery onClick不可重用

问题描述 投票:0回答:1

[嗨,我正在尝试让我的导航栏下拉菜单在屏幕大于992px时通过鼠标输入打开,而在下拉菜单在屏幕小于992px时单击以打开。我遇到的问题是第一次可以正常使用,但是在第二次单击下拉标题并关闭它之后,我无法在关闭后将其打开。

$(document).ready(function() {
  function windowSizeCheck() {
    var $windowSize = $(window).width();
    if ($windowSize > 992) {
      $('.dropdown').mouseenter(function() {
        $(this).children('.dropdown .dropdown-menu').slideDown('slow');
        $(this).children('.dropdown .dropdown-menu').toggleClass('open');

        $(this).mouseleave(function() {
          $(this).children('.dropdown .dropdown-menu').stop(true).slideUp('fast');
          $(this).children('.dropdown .dropdown-menu').removeClass('open');
        });
      });
    } else {
      $('.dropdown').on('click', function() {
        $(this).children('.dropdown .dropdown-menu').slideDown('slow');
        $(this).children('.dropdown .dropdown-menu').toggleClass('open');
        $(this).css({
          'max-height': '400px',
          'overflow-y': 'auto'
        })

        $(this).on('click', function() {
          $(this).children('.dropdown .dropdown-menu').stop(true).slideUp('fast');
          $(this).children('.dropdown .dropdown-menu').toggleClass('open');
        });
      });
    }
  }
  windowSizeCheck();
});
.open {
  display: block;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.3.1/js/bootstrap.js"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.3.1/css/bootstrap.min.css" />
<nav class="navbar navbar-expand-lg navbar-light bg-white px-2 py-0 shadow-sm fixed-top">
  <a href="#" class="navbar-brand">Brand Name</a>
  <button type="button" data-toggle="collapse" data-target="#navbarContent" aria-controls="navbars" aria-expanded="false" aria-label="Toggle navigation" class="navbar-toggler">
                            <span class="navbar-toggler-icon"></span>
                        </button>
  <div id="navbarContent" class="collapse navbar-collapse">
    <ul class="navbar-nav">
      <li class="nav-item">
        <a href="" class="nav-link text-uppercase active navOp">Home</a>
      </li>
      <li class="nav-item dropdown megamenu navOp"><a id="megamneu" href="" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" class="nav-link dropdown-toggle text-uppercase">Brands</a>
        <div aria-labelledby="megamneu" class="dropdown-menu border-0 p-0 m-0 ">
          <div class="p-4 container justify-content-center text-center">
            <div class="row">
              <div class="col-lg-3 mb-4">
                <h6 class="font-weight-bold text-uppercase">Gucci</h6>
                <ul class="list-unstyled">
                  <li class="nav-item"><a href="" class="nav-link text-small pb-0">For Women</a></li>
                  <li class="nav-item"><a href="" class="nav-link text-small pb-0 ">For Men</a></li>
                  <li class="nav-item"><a href="" class="nav-link text-small pb-0 ">Accessories </a></li>
                  <li class="nav-item"><a href="" class="nav-link text-small pb-0 ">Featured</a></li>
                </ul>
              </div>
              <div class="col-lg-3 mb-4">
                <h6 class="font-weight-bold text-uppercase">Versace</h6>
                <ul class="list-unstyled">
                  <li class="nav-item"><a href="" class="nav-link text-small pb-0 ">For Women</a></li>
                  <li class="nav-item"><a href="" class="nav-link text-small pb-0 ">For Men</a></li>
                  <li class="nav-item"><a href="" class="nav-link text-small pb-0 ">Accessories</a></li>
                  <li class="nav-item"><a href="" class="nav-link text-small pb-0 ">Featured</a></li>
                </ul>
              </div>
              <div class="col-lg-3 mb-4">
                <h6 class="font-weight-bold text-uppercase">Louis Vuitton</h6>
                <ul class="list-unstyled">
                  <li class="nav-item"><a href="" class="nav-link text-small pb-0 ">For Women</a></li>
                  <li class="nav-item"><a href="" class="nav-link text-small pb-0 ">For Men</a></li>
                  <li class="nav-item"><a href="" class="nav-link text-small pb-0 ">Accessories </a></li>
                  <li class="nav-item"><a href="" class="nav-link text-small pb-0 ">Featured</a></li>
                </ul>
              </div>
              <div class="col-lg-3 mb-4">
                <h6 class="font-weight-bold text-uppercase">Michael Kors</h6>
                <ul class="list-unstyled">
                  <li class="nav-item"><a href="" class="nav-link text-small pb-0 ">Bags</a></li>
                  <li class="nav-item"><a href="" class="nav-link text-small pb-0 ">Watches</a></li>
                  <li class="nav-item"><a href="" class="nav-link text-small pb-0 ">Shoes</a></li>
                  <li class="nav-item"><a href="" class="nav-link text-small pb-0 ">Jewelry </a></li>
                </ul>
              </div>
            </div>
          </div>
        </div>
      </li>
      <li class="nav-item dropdown megamenu navOp"><a id="megamneu" href="" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" class="nav-link dropdown-toggle text-uppercase">Women</a>
        <div aria-labelledby="megamneu" class="dropdown-menu border-0 p-0 m-0">
          <div class="p-4 container justify-content-center text-center">
            <div class="row">
              <div class="col-lg-3 mb-4">
                <h6 class="font-weight-bold text-uppercase">Bags</h6>
                <ul class="list-unstyled">
                  <li class="nav-item"><a href="" class="nav-link text-small pb-0">Shoulder Bags</a></li>
                  <li class="nav-item"><a href="" class="nav-link text-small pb-0 ">Mini Bags</a></li>
                  <li class="nav-item"><a href="" class="nav-link text-small pb-0 ">Travel Bags</a></li>
                  <li class="nav-item"><a href="" class="nav-link text-small pb-0 ">Handbags</a></li>
                </ul>
              </div>
              <div class="col-lg-3 mb-4">
                <h6 class="font-weight-bold text-uppercase">Tops</h6>
                <ul class="list-unstyled">
                  <li class="nav-item"><a href="" class="nav-link text-small pb-0 ">Shirts</a></li>
                  <li class="nav-item"><a href="" class="nav-link text-small pb-0 ">Sweaters</a></li>
                  <li class="nav-item"><a href="" class="nav-link text-small pb-0 ">Hoodies</a></li>
                  <li class="nav-item"><a href="" class="nav-link text-small pb-0 ">Jackets</a></li>
                </ul>
              </div>
              <div class="col-lg-3 mb-4">
                <h6 class="font-weight-bold text-uppercase">Pants</h6>
                <ul class="list-unstyled">
                  <li class="nav-item"><a href="" class="nav-link text-small pb-0 ">Denim</a></li>
                  <li class="nav-item"><a href="" class="nav-link text-small pb-0 ">Leggings</a></li>
                  <li class="nav-item"><a href="" class="nav-link text-small pb-0 ">Skirts</a></li>
                  <li class="nav-item"><a href="" class="nav-link text-small pb-0 ">Shorts</a></li>
                </ul>
              </div>
              <div class="col-lg-3 mb-4">
                <h6 class="font-weight-bold text-uppercase">Accessories</h6>
                <ul class="list-unstyled">
                  <li class="nav-item"><a href="" class="nav-link text-small pb-0 ">Watches</a></li>
                  <li class="nav-item"><a href="" class="nav-link text-small pb-0 ">Purses/ Wallets</a></li>
                  <li class="nav-item"><a href="" class="nav-link text-small pb-0 ">Jewelry</a></li>
                  <li class="nav-item"><a href="" class="nav-link text-small pb-0 ">Sunglasses </a></li>
                  <li class="nav-item"><a href="" class="nav-link text-small pb-0 ">Shoes </a></li>
                </ul>
              </div>
            </div>
          </div>
        </div>
      </li>

      <li class="nav-item dropdown megamenu navOp"><a id="megamneu" href="" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" class="nav-link dropdown-toggle text-uppercase">Men</a>
        <div aria-labelledby="megamneu" class="dropdown-menu border-0 p-0 m-0 text-center">
          <div class="p-4 container justify-content-center">
            <div class="row">
              <div class="col-lg-3 mb-4">
                <h6 class="font-weight-bold text-uppercase">Tops</h6>
                <ul class="list-unstyled">
                  <li class="nav-item"><a href="" class="nav-link text-small pb-0">Tees</a></li>
                  <li class="nav-item"><a href="" class="nav-link text-small pb-0 ">Crewnecks</a></li>
                  <li class="nav-item"><a href="" class="nav-link text-small pb-0 ">Sweaters</a></li>
                  <li class="nav-item"><a href="" class="nav-link text-small pb-0 ">Jackets</a></li>
                </ul>
              </div>
              <div class="col-lg-3 mb-4">
                <h6 class="font-weight-bold text-uppercase">Pants</h6>
                <ul class="list-unstyled">
                  <li class="nav-item"><a href="" class="nav-link text-small pb-0 ">Street-wear</a></li>
                  <li class="nav-item"><a href="" class="nav-link text-small pb-0 ">Jeans</a></li>
                  <li class="nav-item"><a href="" class="nav-link text-small pb-0 ">Sweats</a></li>
                  <li class="nav-item"><a href="" class="nav-link text-small pb-0 ">Joggers</a></li>
                </ul>
              </div>
              <div class="col-lg-3 mb-4">
                <h6 class="font-weight-bold text-uppercase">Shoes</h6>
                <ul class="list-unstyled">
                  <li class="nav-item"><a href="" class="nav-link text-small pb-0 ">Sneakers</a></li>
                  <li class="nav-item"><a href="" class="nav-link text-small pb-0 ">Boots</a></li>
                  <li class="nav-item"><a href="" class="nav-link text-small pb-0 ">Skate Shoes</a></li>
                  <li class="nav-item"><a href="" class="nav-link text-small pb-0 ">Street-wear</a></li>
                </ul>
              </div>
              <div class="col-lg-3 mb-4">
                <h6 class="font-weight-bold text-uppercase">Accessories</h6>
                <ul class="list-unstyled">
                  <li class="nav-item"><a href="" class="nav-link text-small pb-0 ">Wallets</a></li>
                  <li class="nav-item"><a href="" class="nav-link text-small pb-0 ">Watches</a></li>
                  <li class="nav-item"><a href="" class="nav-link text-small pb-0 ">Jewelry</a></li>
                  <li class="nav-item"><a href="" class="nav-link text-small pb-0 ">Sunglasses</a></li>
                </ul>
              </div>
            </div>
          </div>
        </div>
      </li>
      <li class="nav-item navOp"><a href="" class="nav-link text-uppercase">About</a></li>
      <li class="nav-item navOp"><a href="" class="nav-link text-uppercase">Contact</a></li>
    </ul>
    <ul class="navbar-nav ml-auto">
      <li class="nav-item"><a href="" class="nav-link text-uppercase"><i class="fas fa-shopping-cart"></i></a></li>

    </ul>
  </div>
</nav>
jquery bootstrap-4
1个回答
0
投票

几件事:

  • 您仅在文档加载时检测屏幕尺寸,添加了窗口调整大小事件以重新计算$windowSize
  • 将内联max-heightoverflow-y属性更改为类openNav
  • 存在一个内联display:block属性,该属性已添加并限制导航在单击时关闭(在<992px上)

$(document).ready(function() {
  function windowSizeCheck() {
    var $windowSize = $(window).width();

    if ($windowSize > 992) {
      $('.dropdown').mouseenter(function() {
        $(this).children('.dropdown .dropdown-menu').slideDown('slow');
        $(this).children('.dropdown .dropdown-menu').toggleClass('open');
        $(this).children('.dropdown .dropdown-menu').addClass('open');

        $(this).mouseleave(function() {
          $(this).children('.dropdown .dropdown-menu').stop(true).slideUp('fast');
          $(this).children('.dropdown .dropdown-menu').removeClass('open');
        });
      });
    } else {

      $('.dropdown').on('click', function() {
        $(this).children('.dropdown .dropdown-menu').slideDown('slow');
        $(this).children('.dropdown .dropdown-menu').toggleClass('open');
        $(this).children('.dropdown .dropdown-menu').toggleClass('openNav');

        if ($(this).children('.dropdown .dropdown-menu').hasClass('open')) {
          $(this).children('.dropdown .dropdown-menu').removeClass('open');
        }
        if ($(this).children('.dropdown .dropdown-menu').attr('style')) {
          $(this).children('.dropdown .dropdown-menu').removeAttr('style');
        }

      });
    }
  }
  // this runs when document loads for the first time
  windowSizeCheck();

  $(window).on('resize', function() {
    // this runs when document loads for the first time
    windowSizeCheck();
  });

});
.open {
  display: block;
}

.openNav {
  max-height: 400px;
  overflow-y: auto;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.3.1/js/bootstrap.js"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.3.1/css/bootstrap.min.css" />

<nav class="navbar navbar-expand-lg navbar-light bg-white px-2 py-0 shadow-sm fixed-top">
  <a href="#" class="navbar-brand">Brand Name</a>
  <button type="button" data-toggle="collapse" data-target="#navbarContent" aria-controls="navbars" aria-expanded="false" aria-label="Toggle navigation" class="navbar-toggler">
      <span class="navbar-toggler-icon"></span>
    </button>
  <div id="navbarContent" class="collapse navbar-collapse">
    <ul class="navbar-nav">
      <li class="nav-item">
        <a href="" class="nav-link text-uppercase active navOp">Home</a>
      </li>
      <li class="nav-item dropdown megamenu navOp"><a id="megamneu" href="" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" class="nav-link dropdown-toggle text-uppercase">Brands</a>
        <div aria-labelledby="megamneu" class="dropdown-menu border-0 p-0 m-0 ">
          <div class="p-4 container justify-content-center text-center">
            <div class="row">
              <div class="col-lg-3 mb-4">
                <h6 class="font-weight-bold text-uppercase">Gucci</h6>
                <ul class="list-unstyled">
                  <li class="nav-item"><a href="" class="nav-link text-small pb-0">For Women</a></li>
                  <li class="nav-item"><a href="" class="nav-link text-small pb-0 ">For Men</a></li>
                  <li class="nav-item"><a href="" class="nav-link text-small pb-0 ">Accessories </a></li>
                  <li class="nav-item"><a href="" class="nav-link text-small pb-0 ">Featured</a></li>
                </ul>
              </div>
              <div class="col-lg-3 mb-4">
                <h6 class="font-weight-bold text-uppercase">Versace</h6>
                <ul class="list-unstyled">
                  <li class="nav-item"><a href="" class="nav-link text-small pb-0 ">For Women</a></li>
                  <li class="nav-item"><a href="" class="nav-link text-small pb-0 ">For Men</a></li>
                  <li class="nav-item"><a href="" class="nav-link text-small pb-0 ">Accessories</a></li>
                  <li class="nav-item"><a href="" class="nav-link text-small pb-0 ">Featured</a></li>
                </ul>
              </div>
              <div class="col-lg-3 mb-4">
                <h6 class="font-weight-bold text-uppercase">Louis Vuitton</h6>
                <ul class="list-unstyled">
                  <li class="nav-item"><a href="" class="nav-link text-small pb-0 ">For Women</a></li>
                  <li class="nav-item"><a href="" class="nav-link text-small pb-0 ">For Men</a></li>
                  <li class="nav-item"><a href="" class="nav-link text-small pb-0 ">Accessories </a></li>
                  <li class="nav-item"><a href="" class="nav-link text-small pb-0 ">Featured</a></li>
                </ul>
              </div>
              <div class="col-lg-3 mb-4">
                <h6 class="font-weight-bold text-uppercase">Michael Kors</h6>
                <ul class="list-unstyled">
                  <li class="nav-item"><a href="" class="nav-link text-small pb-0 ">Bags</a></li>
                  <li class="nav-item"><a href="" class="nav-link text-small pb-0 ">Watches</a></li>
                  <li class="nav-item"><a href="" class="nav-link text-small pb-0 ">Shoes</a></li>
                  <li class="nav-item"><a href="" class="nav-link text-small pb-0 ">Jewelry </a></li>
                </ul>
              </div>
            </div>
          </div>
        </div>
      </li>
      <li class="nav-item dropdown megamenu navOp"><a id="megamneu" href="" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" class="nav-link dropdown-toggle text-uppercase">Women</a>
        <div aria-labelledby="megamneu" class="dropdown-menu border-0 p-0 m-0">
          <div class="p-4 container justify-content-center text-center">
            <div class="row">
              <div class="col-lg-3 mb-4">
                <h6 class="font-weight-bold text-uppercase">Bags</h6>
                <ul class="list-unstyled">
                  <li class="nav-item"><a href="" class="nav-link text-small pb-0">Shoulder Bags</a></li>
                  <li class="nav-item"><a href="" class="nav-link text-small pb-0 ">Mini Bags</a></li>
                  <li class="nav-item"><a href="" class="nav-link text-small pb-0 ">Travel Bags</a></li>
                  <li class="nav-item"><a href="" class="nav-link text-small pb-0 ">Handbags</a></li>
                </ul>
              </div>
              <div class="col-lg-3 mb-4">
                <h6 class="font-weight-bold text-uppercase">Tops</h6>
                <ul class="list-unstyled">
                  <li class="nav-item"><a href="" class="nav-link text-small pb-0 ">Shirts</a></li>
                  <li class="nav-item"><a href="" class="nav-link text-small pb-0 ">Sweaters</a></li>
                  <li class="nav-item"><a href="" class="nav-link text-small pb-0 ">Hoodies</a></li>
                  <li class="nav-item"><a href="" class="nav-link text-small pb-0 ">Jackets</a></li>
                </ul>
              </div>
              <div class="col-lg-3 mb-4">
                <h6 class="font-weight-bold text-uppercase">Pants</h6>
                <ul class="list-unstyled">
                  <li class="nav-item"><a href="" class="nav-link text-small pb-0 ">Denim</a></li>
                  <li class="nav-item"><a href="" class="nav-link text-small pb-0 ">Leggings</a></li>
                  <li class="nav-item"><a href="" class="nav-link text-small pb-0 ">Skirts</a></li>
                  <li class="nav-item"><a href="" class="nav-link text-small pb-0 ">Shorts</a></li>
                </ul>
              </div>
              <div class="col-lg-3 mb-4">
                <h6 class="font-weight-bold text-uppercase">Accessories</h6>
                <ul class="list-unstyled">
                  <li class="nav-item"><a href="" class="nav-link text-small pb-0 ">Watches</a></li>
                  <li class="nav-item"><a href="" class="nav-link text-small pb-0 ">Purses/ Wallets</a></li>
                  <li class="nav-item"><a href="" class="nav-link text-small pb-0 ">Jewelry</a></li>
                  <li class="nav-item"><a href="" class="nav-link text-small pb-0 ">Sunglasses </a></li>
                  <li class="nav-item"><a href="" class="nav-link text-small pb-0 ">Shoes </a></li>
                </ul>
              </div>
            </div>
          </div>
        </div>
      </li>

      <li class="nav-item dropdown megamenu navOp"><a id="megamneu" href="" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" class="nav-link dropdown-toggle text-uppercase">Men</a>
        <div aria-labelledby="megamneu" class="dropdown-menu border-0 p-0 m-0 text-center">
          <div class="p-4 container justify-content-center">
            <div class="row">
              <div class="col-lg-3 mb-4">
                <h6 class="font-weight-bold text-uppercase">Tops</h6>
                <ul class="list-unstyled">
                  <li class="nav-item"><a href="" class="nav-link text-small pb-0">Tees</a></li>
                  <li class="nav-item"><a href="" class="nav-link text-small pb-0 ">Crewnecks</a></li>
                  <li class="nav-item"><a href="" class="nav-link text-small pb-0 ">Sweaters</a></li>
                  <li class="nav-item"><a href="" class="nav-link text-small pb-0 ">Jackets</a></li>
                </ul>
              </div>
              <div class="col-lg-3 mb-4">
                <h6 class="font-weight-bold text-uppercase">Pants</h6>
                <ul class="list-unstyled">
                  <li class="nav-item"><a href="" class="nav-link text-small pb-0 ">Street-wear</a></li>
                  <li class="nav-item"><a href="" class="nav-link text-small pb-0 ">Jeans</a></li>
                  <li class="nav-item"><a href="" class="nav-link text-small pb-0 ">Sweats</a></li>
                  <li class="nav-item"><a href="" class="nav-link text-small pb-0 ">Joggers</a></li>
                </ul>
              </div>
              <div class="col-lg-3 mb-4">
                <h6 class="font-weight-bold text-uppercase">Shoes</h6>
                <ul class="list-unstyled">
                  <li class="nav-item"><a href="" class="nav-link text-small pb-0 ">Sneakers</a></li>
                  <li class="nav-item"><a href="" class="nav-link text-small pb-0 ">Boots</a></li>
                  <li class="nav-item"><a href="" class="nav-link text-small pb-0 ">Skate Shoes</a></li>
                  <li class="nav-item"><a href="" class="nav-link text-small pb-0 ">Street-wear</a></li>
                </ul>
              </div>
              <div class="col-lg-3 mb-4">
                <h6 class="font-weight-bold text-uppercase">Accessories</h6>
                <ul class="list-unstyled">
                  <li class="nav-item"><a href="" class="nav-link text-small pb-0 ">Wallets</a></li>
                  <li class="nav-item"><a href="" class="nav-link text-small pb-0 ">Watches</a></li>
                  <li class="nav-item"><a href="" class="nav-link text-small pb-0 ">Jewelry</a></li>
                  <li class="nav-item"><a href="" class="nav-link text-small pb-0 ">Sunglasses</a></li>
                </ul>
              </div>
            </div>
          </div>
        </div>
      </li>
      <li class="nav-item navOp"><a href="" class="nav-link text-uppercase">About</a></li>
      <li class="nav-item navOp"><a href="" class="nav-link text-uppercase">Contact</a></li>
    </ul>
    <ul class="navbar-nav ml-auto">
      <li class="nav-item"><a href="" class="nav-link text-uppercase"><i class="fas fa-shopping-cart"></i></a></li>

    </ul>
  </div>
</nav>
© www.soinside.com 2019 - 2024. All rights reserved.