【问题标题】:When User Open One DropDown Close Other DropDowns当用户打开一个下拉菜单时关闭其他下拉菜单
【发布时间】:2019-10-15 05:21:11
【问题描述】:

我希望当用户单击一个 DropDown 所有其他打开 DropDown 时关闭。我在谷歌寻找答案,但这不适用于我的下拉菜单,我知道这很简单,但我无法帮助我!

<div class="hh_drop_down">
<ul class="hh_main">

   <li class="hh_main_menu">
    <a href="javascript:void(0);" class="hh_sf">Chemicals</a>
     <ul class="hh_inner">
        <li><a href="#">Additives / Boosters</a></li>
        <li><a href="#">Anti-Allergen</a></li>
        <li><a href="#">Concrete</a></li>
    </ul>
  </li>

  <li  class="hh_main_menu" >
    <a class="hh_sf" href="#">Equipment</a>
      <ul class="hh_inner">
        <li><a href="#">Deodorization</a></li>
        <li><a href="#">Duct Cleaning Equipment</a></li>
        <li><a href="#">Hard Surface</a></li>
     </ul>

  </li>

   <li  class="hh_main_menu" >
     <a class="hh_sf" href="#">Accessories</a>
      <ul class="hh_inner">
          <li><a href="#">Bonnets/Pads</a></li>
          <li><a href="#">Brush/Rake/Sponge</a></li>
        <li><a href="#">Carpet Rakes</a></li>
      </ul>
   </li>

</ul>
</div>

我正在使用 jquery:

<script>
 $(document).ready(function(){
     $(".hh_main").on('click' , '.hh_sf' , function(event){
       event.preventDefault();
        if($(this).next().hasClass('hh_inner')) { 
        $(this).next().slideToggle();
     }
   });
});
</script>

【问题讨论】:

    标签: javascript jquery html css drop-down-menu


    【解决方案1】:

    试试这个:

    HTML:

    <div class="hh_drop_down">
        <ul class="hh_main">
    
            <li class="hh_main_menu">
                <a href="javascript:void(0);" class="hh_sf">Chemicals</a>
                <ul class="hh_inner expanded">
                    <li><a href="#">Additives / Boosters</a></li>
                    <li><a href="#">Anti-Allergen</a></li>
                    <li><a href="#">Concrete</a></li>
                </ul>
            </li>
    
            <li class="hh_main_menu">
                <a class="hh_sf" href="#">Equipment</a>
                <ul class="hh_inner expanded">
                    <li><a href="#">Deodorization</a></li>
                    <li><a href="#">Duct Cleaning Equipment</a></li>
                    <li><a href="#">Hard Surface</a></li>
                </ul>
    
            </li>
    
            <li class="hh_main_menu">
                <a class="hh_sf" href="#">Accessories</a>
                <ul class="hh_inner expanded">
                    <li><a href="#">Bonnets/Pads</a></li>
                    <li><a href="#">Brush/Rake/Sponge</a></li>
                    <li><a href="#">Carpet Rakes</a></li>
                </ul>
            </li>
    
        </ul>
    </div>
    

    JQuery:

    <script>
        $(document).ready(function () {
            $(".hh_sf").next().addClass("collapsed").slideUp();
    
            $(".hh_main").on('click', '.hh_sf', function (event) {
                event.preventDefault();
                var currentClass = $(this).next().prop('class');
                if (currentClass == "hh_inner expanded") {
                    $(this).next().removeClass("expanded");
                    $(this).next().addClass("collapsed");
                    $(this).next().slideUp();
                } else {
                    $(".expanded").slideUp().addClass("collapsed").removeClass("expanded");
    
                    $(this).next().removeClass("collapsed");
                    $(this).next().addClass("expanded");
                    $(this).next().slideDown();
                }
    
            });
        });
    </script>
    

    JsFiddle

    【讨论】:

    • 它正在工作,但是当我点击相同的链接时,如果我再次点击化学品,我希望它关闭但它没有关闭..
    • 当我点击 1 个链接两次时它没有关闭!!请帮助我:)
    • 我不知道你到底想做什么,在加载时将所有 li 显示为展开,或者仅将一个显示为展开。可能是这样,可以帮助你达到你的要求
    • 编辑代码以在开始时向上滑动所有下拉菜单并添加 Fiddle。
    【解决方案2】:

    我用显示和隐藏打开了下拉菜单,并在 li 上创建了事件,你可以使用不同的方式

    试试这个:

    jQuery :

    $(".hh_main_menu").click(
        function(){
            $(this).next(".hh_inner").toggle();
            if($(this).siblings(".hh_main_menu").children(".hh_inner").css("display")=="block")
            {
                $(this).siblings(".hh_main_menu").children(".hh_inner").hide();
            }
        } );
    

    【讨论】:

    • 欢迎来到 SO!我建议您将 $(this) 和 $(this).siblings(".hh_main_menu").children(".hh_inner") 缓存在变量中,以便您可以重复使用它们的结果以获得更好的性能并避免代码重复。 var $this = $(this); 然后你可以做$this.next(... 和var $hhInner = $this.siblings(".hh_main_menu").children(".hh_inner") 所以你可以做$hhInner.hide();。说到hide,它的性能相对来说很糟糕,所以最好根据这个操作的大小/频率来切换一个类来显示/隐藏。
    猜你喜欢
    • 1970-01-01
    • 2020-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-15
    • 1970-01-01
    • 1970-01-01
    • 2013-04-11
    相关资源
    最近更新 更多