javascript - JQuery slidetoggle 嵌套列表关闭打开列表不起作用

标签 javascript jquery

我有一个像这样的简单嵌套列表:

<ul class='main'>
  <li class='mainlink'><a href='#'>Main 1</a>
    <ul class='sub'>
      <li><a href='#'>Sub 1-1</a>
        <li><a href='#'>Sub 1-2</a>
          <li><a href='#'>Sub 1-3</a>
    </ul>
    </li>
    <li class='mainlink'><a href='#'>Main 2</a>
      <ul class='sub'>
        <li><a href='#'>Sub 2-1</a>
          <li><a href='#'>Sub 2-2</a>
            <li><a href='#'>Sub 3-3</a>
      </ul>
      </li>
      <li class='mainlink'><a href='#'>Main 3</a>
        <ul class='sub'>
          <li><a href='#'>Sub 3-1</a>
            <li><a href='#'>Sub 3-2</a>
              <li><a href='#'>Sub 3-2</a>
        </ul>
        </li>
</ul>

这是我的 jQuery:

$( ".mainlink" ).click(function() { 
    var child = $(this).children('.sub');
    var rest = $('.sub:visible').not(child);     
    child.slideToggle();
    rest.slideUp();    
});

单击 .mainlink 应打开其子列表 .sub 并关闭所有其他打开的子列表。这部分按预期工作,但在打开 .sub 的情况下单击 .mainlink 会关闭 .sub 并在之后立即打开它,而不是保持关闭状态直到下一次点击发生。

这个问题可能很容易解决,但我显然找不到正确的方法。感谢您的帮助。

拉尔夫

最佳答案

试试这个:

$(document).ready(function(){
   $( ".mainlink > a" ).click(function() { 
        $('.main .sub').not($(this)).slideUp();
        var child = $(this).parent().children('.sub');
        if(!child.is(":visible")){
            child.slideDown();      
        }    
  });
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<ul class='main'>
<li class='mainlink'><a href='#'>Main 1</a>
<ul class='sub' style='display:none'>
<li><a href='#'>Sub 1-1</a>
<li><a href='#'>Sub 1-2</a>
<li><a href='#'>Sub 1-3</a>
</ul>
</li>
<li class='mainlink'><a href='#'>Main 2</a>
<ul class='sub' style='display:none'>
<li><a href='#'>Sub 2-1</a>
<li><a href='#'>Sub 2-2</a>
<li><a href='#'>Sub 3-3</a>
</ul>
</li>
<li class='mainlink'><a href='#'>Main 3</a>
<ul class='sub' style='display:none'>
<li><a href='#'>Sub 3-1</a>
<li><a href='#'>Sub 3-2</a>
<li><a href='#'>Sub 3-2</a>
</ul>
</li>
</ul>

关于javascript - JQuery slidetoggle 嵌套列表关闭打开列表不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54968791/

相关文章:

javascript - Jquery 移动到其他 div(动画)

javascript - 测试模块的未导出 Node 方法

javascript - 反向滚动和粘性元素

javascript - 插入符不在 div 上的跨度(contenteditable ="false")之间(contenteditable ="true")

javascript - 使用自定义按钮控制Soundcloud HTML5 Widget Player

javascript - onclick 和 ondblclick 不能一起工作

javascript - ajax xhr.upload.addEventListener 不适用于跨域调用

javascript - 文本未从 Laravel 中的 summernote 存储

javascript - LARAVEL中使用JS Array通过AJAX动态插入HTML到View中

jquery - 无限滚动(Waypoints),带有 jQ​​uery Mobile、后退按钮和远程脚本调用两次