Как при клике вне элемента скрыть его, если элементов несколько?

Есть 4 одинаковых по структуре блока с разным содержимым. как сделать, что бы при клике вне открывшегося блока он скрывался?
Сделал так
$(".filter-link").click(function() {
  $('.filter-block').toggle();
});
$(document).on('click', function(e) {
  if (!$(e.target).closest(".filter").length) {
    $('.filter-block').hide();
  }
  e.stopPropagation();
});

и вот таких 4 блока
<form class="filter-form">
    <div class="filter">
    <a class="filter-link" href="#" onclick="$('.filter-block-cat').toggle();return false;">Категория</a>
    <ul class="filter-block filter-block-cat" aria-labelledby="filter-block" style="display:none;">
содержимое
    </ul>
    </div

при клике по блоку открывается 3 других блока, а при клике вне блока все закрываются. Как правильно реализовать? что бы блоки друг от друга не зависели?
  • Вопрос задан
  • 141 просмотр
Пригласить эксперта
Ответы на вопрос 1
@UthvfyV
"при клике вне открывшегося блока", так блоки открыты или нет? Я понял что открыты. Или как? Неважно. Назначьте разные классы для каждого блока. Блоку который вне всего этого хозяйства. дадим класс external. У одного из блоков класс filter1. Тогда
<script>$(document).ready(function(){
$(".external.").click(function(){
$(".filter1").hide();});});</script>
Т.е. при клике по внешнему external. filter1 закрывается. Однако если мы назначим всем 4 блокам один и тот же класс то они дружно будут взаимодействовать. Сюда $(".external."), $(".") можно вставлять не только класс или id, но название тега, допустим body или aside. Или можно наоборот, показать блок.
<script>$(document).ready(function(){
$(".external.").click(function(){
$(".filter1").show();});});</script>
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы