Автоматическое сворачивание объекта

290
23 июня 2018, 15:10

Есть меню с выпадающим списком, выпадающий список появляется по клику (slideToggle()), как сделать чтобы подменю автоматически сворачивался обратно если происходит клик по другому выпадающему списку или по полю вне блока подменю?

  $('.dropdown').on('click',function(){ 
      $(this).children('.submenu').slideToggle(200); 
      })
*{ 
  font-family: sans-serif;   
} 
ul{ 
  list-style:none; 
} 
li{ 
  display:inline-block; 
  background: #000; 
} 
a{ 
  display:block; 
  padding: 10px; 
  color:#fff; 
  text-decoration: none; 
} 
.dropdown{ 
  position: relative; 
  background: orange; 
} 
 
.submenu{ 
  margin: 0; 
  padding: 0; 
  position: absolute; 
  left: 0;top: 38px; 
  background: pink; 
  display:none; 
} 
.submenu li{ 
  display:block; 
  top: 0; 
  background: tomato; 
} 
.submenu li a{ 
  padding: 10px 40px; 
} 
.submenu li:hover{ 
  background: red; 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
<nav> 
  <ul> 
    <li><a href="#">Link1</a></li> 
    <li><a href="#">Link2</a></li> 
    <li class="dropdown"> 
      <a href="#">Link3</a> 
      <ul class="submenu"> 
        <li><a href="#">sublink1</a></li> 
        <li><a href="#">sublink2</a></li> 
        <li><a href="#">sublink3</a></li> 
        <li><a href="#">sublink4</a></li> 
        <li><a href="#">sublink5</a></li> 
      </ul> 
    </li> 
    <li><a href="#">Link4</a></li> 
    <li class="dropdown"> 
      <a href="#">Link5</a> 
      <ul class="submenu"> 
        <li><a href="#">sublink1</a></li> 
        <li><a href="#">sublink2</a></li> 
        <li><a href="#">sublink3</a></li> 
        <li><a href="#">sublink4</a></li> 
        <li><a href="#">sublink5</a></li> 
      </ul> 
    </li>  
  </ul> 
</nav> 
<hr> 
<p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Quae impedit dolorum accusamus esse fuga, non, necessitatibus cumque repellendus iure expedita adipisci nulla minus, iusto maiores quasi magni beatae suscipit cupiditate exercitationem? Debitis odit a exercitationem, asperiores, non optio quas ab commodi quam ullam est necessitatibus error vel excepturi nisi ut ad voluptatem mollitia cumque dolorum facere magnam quo. Provident corporis eaque repellat quam magnam aut rerum consequatur temporibus nesciunt expedita. At beatae modi repellendus ducimus velit ratione, sapiente voluptas amet consectetur quidem nihil possimus nobis illo quasi, in, minus non enim. Nulla, quas tenetur enim culpa quibusdam ex rerum officiis.</p>

Answer 1

$(document).on('click', function(e) { 
  if (!$(e.target).hasClass('dropdown') && !$(e.target).closest('.dropdown').length) 
    $('.submenu:visible').slideToggle(200); 
}); 
 
$('.dropdown').on('click', function() { 
  $('.submenu:visible').not($(this).children('.submenu')).slideToggle(200); 
  $(this).children('.submenu').slideToggle(200); 
});
* { 
  font-family: sans-serif; 
} 
 
ul { 
  list-style: none; 
} 
 
li { 
  display: inline-block; 
  background: #000; 
} 
 
a { 
  display: block; 
  padding: 10px; 
  color: #fff; 
  text-decoration: none; 
} 
 
.dropdown { 
  position: relative; 
  background: orange; 
} 
 
.submenu { 
  margin: 0; 
  padding: 0; 
  position: absolute; 
  left: 0; 
  top: 38px; 
  background: pink; 
  display: none; 
} 
 
.submenu li { 
  display: block; 
  top: 0; 
  background: tomato; 
} 
 
.submenu li a { 
  padding: 10px 40px; 
} 
 
.submenu li:hover { 
  background: red; 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
<nav> 
  <ul> 
    <li><a href="#">Link1</a></li> 
    <li><a href="#">Link2</a></li> 
    <li class="dropdown"> 
      <a href="#">Link3</a> 
      <ul class="submenu"> 
        <li><a href="#">sublink1</a></li> 
        <li><a href="#">sublink2</a></li> 
        <li><a href="#">sublink3</a></li> 
        <li><a href="#">sublink4</a></li> 
        <li><a href="#">sublink5</a></li> 
      </ul> 
    </li> 
    <li><a href="#">Link4</a></li> 
    <li class="dropdown"> 
      <a href="#">Link5</a> 
      <ul class="submenu"> 
        <li><a href="#">sublink1</a></li> 
        <li><a href="#">sublink2</a></li> 
        <li><a href="#">sublink3</a></li> 
        <li><a href="#">sublink4</a></li> 
        <li><a href="#">sublink5</a></li> 
      </ul> 
    </li> 
  </ul> 
</nav> 
<hr> 
<p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Quae impedit dolorum accusamus esse fuga, non, necessitatibus cumque repellendus iure expedita adipisci nulla minus, iusto maiores quasi magni beatae suscipit cupiditate exercitationem? Debitis 
  odit a exercitationem, asperiores, non optio quas ab commodi quam ullam est necessitatibus error vel excepturi nisi ut ad voluptatem mollitia cumque dolorum facere magnam quo. Provident corporis eaque repellat quam magnam aut rerum consequatur temporibus 
  nesciunt expedita. At beatae modi repellendus ducimus velit ratione, sapiente voluptas amet consectetur quidem nihil possimus nobis illo quasi, in, minus non enim. Nulla, quas tenetur enim culpa quibusdam ex rerum officiis.</p>

READ ALSO
Активное меню SrollSpy

Активное меню SrollSpy

Есть код , идея в том чтобы активному пункту меню присваивался класс, сейчас класс присваивается для a href="", а нужно чтобы класс добавлялся...

221
Конфликт datetimepicker и MultiDatesPicker

Конфликт datetimepicker и MultiDatesPicker

Проблема в том, что на админ-панели сайта подключена библиотека datetimepicker и никак нельзя её отключитьНужно реализовать выбор несколько дат,...

231
Поведение меню при кликах

Поведение меню при кликах

Есть такая загвоздка:

216
Jquery маска номера телефона

Jquery маска номера телефона

День добрый! Подскажите пожалуйстаВ интернете описана кучу методов использования масок на инпутах

209