【问题标题】:jquery slideup slidedown - stop re-open on current list itemjquery slideup slidedown - 在当前列表项上停止重新打开
【发布时间】:2013-07-26 10:37:27
【问题描述】:

我有以下菜单 - 它工作正常。我让它在单击列表项时会下拉。单击另一个列表项时,旧的会关闭,而单击的会打开。 但是 - 单击已打开的列表项时(关闭它)。它关闭然后重新打开。我怎样才能让它关闭而不重新打开。 请参阅下面的 jsfiddle 和代码。 谢谢

http://jsfiddle.net/Bx5cu/15/

<nav id="global_nav">
   <ul class="no-js">
     <li><a href="#">ABOUT US</a>
     <ul>
        <li><a href="#">About Us</a></li>
     </ul>
     </li>
     <li><a href="#">PRODUCTS</a>
     <ul>
        <li><a href="#">Products</a></li>
        <li><a href="#">Tractor</a></li>
        <li><a href="#">Organic</a></li>
    </ul>
    </li>
  </ul>
</nav>

JS

$(document).ready(function(){
$('#global_nav > ul').toggleClass('no-js js');

var menuList = $("#global_nav").find(".js").find("li");
menuList.find("ul").hide();
menuList.on("click", function(){

menuList.removeClass("selected");
menuList.find("ul").slideUp(400);
$(this).find("ul").slideDown(400);
$(this).addClass("selected");


});

});

编辑 谢谢大家的意见

得到它与以下工作 - 我使用了一个人提交的条件,该条件首先回答了这个问题,但现在找不到他们的答案 - 我只是稍微调整了一下,但这是 jsfiddle:link - 一切都很好现在 - 谢谢:)

新的 JS

$(document).ready(function(){
$('#global_nav > ul').toggleClass('no-js js');

var menuList = $(".js").find("li");
menuList.find("ul").hide();
menuList.on("click", function(){
    menuList.find("ul").slideUp(400);
    if (!($(this).find("ul").is(":visible"))) {
        menuList.removeClass("selected");
        $(this).find("ul").slideDown(400);
        $(this).addClass("selected");       
    };  
});

});

【问题讨论】:

    标签: jquery menu slidedown slideup


    【解决方案1】:

    您可以像这样切换它们,而不是显式显示和隐藏您的uls:

    $(this).find("ul").slideToggle(400);
    $(this).toggleClass("selected");
    

    编辑

    如果您希望在任何时候只打开一个菜单,请在切换之前添加以下行:

    menuList.find("ul").slideUp(400);
    

    http://jsfiddle.net/D3edP/1/

    【讨论】:

    • 谢谢,但这又导致了我原来的问题,即当前打开的列表项关闭,然后再次重新打开。虽然在我的编辑中排序。再次感谢。
    【解决方案2】:
            <script type="text/javascript">
            $(function () {
    
                var menu_ul = $('.no-js" > li > ul'),
                       menu_a = $('.no-js" > li > a');
    
                menu_ul.hide();
    
                menu_a.click(function (e) {
                    e.preventDefault();
                    if (!$(this).hasClass('active')) {
                        menu_a.removeClass('active');
                        menu_ul.filter(':visible').slideUp('normal');
                        $(this).addClass('active').next().stop(true, true).slideDown('normal');
                    } else {
                        $(this).removeClass('active');
                        $(this).next().stop(true, true).slideUp('normal');
                    }
                });
    
            });
    

    使用上面的代码

    【讨论】:

      【解决方案3】:

      这是经过一些调整和有效输入后工作的 JS:

      $(document).ready(function(){
      $('#global_nav > ul').toggleClass('no-js js');
      
      var menuList = $(".js").find("li");
      menuList.find("ul").hide();
      menuList.on("click", function(){
      menuList.find("ul").slideUp(400);
      if (!($(this).find("ul").is(":visible"))) {
          menuList.removeClass("selected");
          $(this).find("ul").slideDown(400);
          $(this).addClass("selected");       
      };  
      });
      
      });
      

      http://jsfiddle.net/Bx5cu/25/

      【讨论】:

        【解决方案4】:

        更新答案

        在这里查看,DEMO http://jsfiddle.net/yeyene/Bx5cu/29/

        $(document).ready(function () {
            $('li ul').slideUp();
        
            $('.no-js li a').on("click", function () {
                $('ul ul').slideUp(400);
                if($(this).siblings('ul').is(":visible"))
                    $(this).siblings('ul').slideUp(400);
                else
                    $(this).siblings('ul').slideDown(400);
            });
        });
        

        【讨论】:

        • 谢谢,但是当点击新项目时,这不会关闭之前打开的列表项目
        【解决方案5】:

        好吧,只需更改您的点击侦听器:我已更新您的小提琴here

        $(document).ready(function(){
            $('#global_nav > ul').toggleClass('no-js js');
        
            var menuList = $(".js").find("li");
            menuList.find("ul").hide();
            menuList.on("click", function(){
        
                menuList.find("ul").slideUp(400);
                if(!$(this).is(".selected")){
                        console.log("ok");
                        $(this).find("ul").slideDown(400);
                        menuList.removeClass("selected");// <-- simply add this to fix the issue
                        $(this).addClass("selected");
                }else{
                        menuList.removeClass("selected");
                }       
            });
        
        });
        

        【讨论】:

        • 谢谢,当你测试它时会发生一些奇怪的事情 - 有时当点击它打开的新列表项时,有时它只是关闭前一个打开的项......
        猜你喜欢
        • 1970-01-01
        • 2018-08-14
        • 2011-07-01
        • 2017-03-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-04-07
        • 1970-01-01
        相关资源
        最近更新 更多