Toggle() 函数元素没有正确消失

Toggle() function elements not disappearing properly

我一直在构建一个 toggle 函数来在单击主菜单 (.ul-one) 时显示子菜单 (.li-one),然后在单击另一个菜单时让子菜单消失页面的一部分被选中。单击页面的任何其他部分时工作正常 HOWEVER,当您单击另一个菜单功能 (.ul-one) 时,前一个不会消失 - 它只会在您单击不相关的内容(在 [= 之外)时消失18=] div)。任何人都可以修改以使子菜单始终消失吗?例如:如果您单击 element 1 然后 element 2 - element 1 子菜单将消失?代码如下:

$(document).ready(function(){
    $(".li-one").hide();
    $('.ul-one') .click(function(event){
        event.stopPropagation();
        $(".li-one",this).slideToggle("medium"); 
    });
    $(".ul-one").on("click", function (event) {
        event.stopPropagation();
    });
});   
.ul-one {
    border:1px black solid;
    width:50%;
    margin-left:auto;
    margin-right:auto;
    margin-bottom:10px;
}

.li-one {
    list-style-type:none;
}
<div class="main-nav">
    <ul class="ul-one">
        <a>Element 1</a>
        <li class="li-one"><a>List Element 1.1</a></li>
        <li class="li-one"><a>List Element 1.2</a></li>
        <li class="li-one"><a>List Element 1.3</a></li>
        <li class="li-one"><a>List Element 1.4</a></li>
    </ul>
    <ul class="ul-one">
        <a>Element 2</a>
        <li class="li-one"><a>List Element 2.1</a></li>
        <li class="li-one"><a>List Element 2.2</a></li>
        <li class="li-one"><a>List Element 2.3</a></li>
        <li class="li-one"><a>List Element 2.4</a></li>
    </ul>
    <ul class="ul-one">
        <a>Element 3</a>
        <li class="li-one"><a>List Element 3.1</a></li>
        <li class="li-one"><a>List Element 3.2</a></li>
        <li class="li-one"><a>List Element 3.3</a></li>
        <li class="li-one"><a>List Element 3.4</a></li>
    </ul>
    <ul class="ul-one">
        <a>Element 4</a>
        <li class="li-one"><a>List Element 4.1</a></li>
        <li class="li-one"><a>List Element 4.2</a></li>
        <li class="li-one"><a>List Element 4.3</a></li>
        <li class="li-one"><a>List Element 4.4</a></li>
    </ul>
</div>

$(document).ready(function() {

  $(".li-one").hide();

  $('.ul-one').click(function(event) {
    event.stopPropagation();
    $(".li-one").hide();//hide all
    $(".li-one", this).slideToggle("medium");
  });
  $(".ul-one").on("click", function(event) {
    event.stopPropagation();
  });
});
.ul-one {
  border: 1px black solid;
  width: 50%;
  margin-left: auto;
  margin-right: auto;
  margin-bottom: 10px;
}
.li-one {
  list-style-type: none;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="main-nav">

  <ul class="ul-one"><a>Element 1</a>
    <li class="li-one"><a>List Element 1.1</a>
    </li>
    <li class="li-one"><a>List Element 1.2</a>
    </li>
    <li class="li-one"><a>List Element 1.3</a>
    </li>
    <li class="li-one"><a>List Element 1.4</a>
    </li>
  </ul>

  <ul class="ul-one"><a>Element 2</a>
    <li class="li-one"><a>List Element 2.1</a>
    </li>
    <li class="li-one"><a>List Element 2.2</a>
    </li>
    <li class="li-one"><a>List Element 2.3</a>
    </li>
    <li class="li-one"><a>List Element 2.4</a>
    </li>
  </ul>

  <ul class="ul-one"><a>Element 3</a>
    <li class="li-one"><a>List Element 3.1</a>
    </li>
    <li class="li-one"><a>List Element 3.2</a>
    </li>
    <li class="li-one"><a>List Element 3.3</a>
    </li>
    <li class="li-one"><a>List Element 3.4</a>
    </li>
  </ul>

  <ul class="ul-one"><a>Element 4</a>
    <li class="li-one"><a>List Element 4.1</a>
    </li>
    <li class="li-one"><a>List Element 4.2</a>
    </li>
    <li class="li-one"><a>List Element 4.3</a>
    </li>
    <li class="li-one"><a>List Element 4.4</a>
    </li>
  </ul>

</div>

  1. 单击按钮时隐藏所有子菜单,然后显示相应的子菜单

请更改

$('.ul-one') .click(function(event){

$('.ul-one').click(function(event){

尝试

 $(".li-one").hide();

 $('.ul-one').click(function(event) {
   event.stopPropagation();
   $('.ul-one').not(this).find('.li-one').slideUp("medium");//slideUp all but the current selected ones

   $(".li-one", this).slideToggle("medium");
 });
 $(".ul-one").on("click", function(event) {
   event.stopPropagation();
 });

https://jsfiddle.net/x57g649h/

检查点击目标,检查是否存在desire元素

$lis = $(".ul-one .li-one").hide();

$("ul.ul-one").on("click", function(event) {
    $lis.not($(this).find('li')).slideUp("medium");
    $(this).find('li').slideToggle("medium");
    event.stopPropagation();
});
$(".main-nav").on("click", function(event) {
    if (!$(event.target).is(".ul-one")) {
        $lis.slideUp("medium");
    }
})

$(document).ready(function() {
  $lis = $(".ul-one .li-one").hide();

  $("ul.ul-one").on("click", function(event) {
    $lis.not($(this).find('li')).slideUp("medium");
    $(this).find('li').slideToggle("medium");
    event.stopPropagation();
  });
  $(".main-nav").on("click", function(event) {
    if (!$(event.target).is(".ul-one")) {
      $lis.slideUp("medium");
    }
  })
});
.ul-one {
  border: 1px black solid;
  width: 50%;
  margin-left: auto;
  margin-right: auto;
  margin-bottom: 10px;
}
.li-one {
  list-style-type: none;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="main-nav">
  <ul class="ul-one">
    <a>Element 1</a>
    <li class="li-one"><a>List Element 1.1</a>
    </li>
    <li class="li-one"><a>List Element 1.2</a>
    </li>
    <li class="li-one"><a>List Element 1.3</a>
    </li>
    <li class="li-one"><a>List Element 1.4</a>
    </li>
  </ul>
  <ul class="ul-one">
    <a>Element 2</a>
    <li class="li-one"><a>List Element 2.1</a>
    </li>
    <li class="li-one"><a>List Element 2.2</a>
    </li>
    <li class="li-one"><a>List Element 2.3</a>
    </li>
    <li class="li-one"><a>List Element 2.4</a>
    </li>
  </ul>
  <ul class="ul-one">
    <a>Element 3</a>
    <li class="li-one"><a>List Element 3.1</a>
    </li>
    <li class="li-one"><a>List Element 3.2</a>
    </li>
    <li class="li-one"><a>List Element 3.3</a>
    </li>
    <li class="li-one"><a>List Element 3.4</a>
    </li>
  </ul>
  <ul class="ul-one">
    <a>Element 4</a>
    <li class="li-one"><a>List Element 4.1</a>
    </li>
    <li class="li-one"><a>List Element 4.2</a>
    </li>
    <li class="li-one"><a>List Element 4.3</a>
    </li>
    <li class="li-one"><a>List Element 4.4</a>
    </li>
  </ul>
</div>