Вы можете использовать свойство event.target для обнаружения щелчка вне элемента, например раскрывающегося меню. Это свойство возвращает элемент DOM, инициировавший событие.

Чтобы проиллюстрировать, как это работает, мы создали раскрывающееся меню в следующем примере, которое будет скрывать и показывать вам подсказку, когда вы щелкаете за пределами области меню с помощью jQuery.

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>jQuery Detect Click Outside an Element</title>
<style>
    body{
        font: 15px Arial, sans-serif;
    }
    ul{
        padding: 0;
        list-style: none;
        background: #f2f2f2;
        border: 1px solid #dedede;
    }
    ul li{
        display: inline-block;
        position: relative;
        line-height: 21px;
    }
    ul li a{
        display: block;
        padding: 8px 25px;
        color: #333;
        text-decoration: none;
    }
    ul li a:hover{
        color: #fff;
        background: #939393;
    }
    ul.dropdown-menu{
        min-width: 100%; /* Устанавливаем ширину раскрывающегося списка */
        background: #f2f2f2;
        display: none;
        position: absolute;
        z-index: 999;     
        left: 0;
    }
    ul.dropdown-menu li{
        display: block;
        white-space: nowrap;
    }
    p.hint{
        height: 25px;
    }
</style>
<script src="https://code.jquery.com/jquery-3.5.1.min.js"></script>
<script>
$(document).ready(function(){
    // Переключение раскрывающегося меню при нажатии элемента триггера
    $(".dropdown-toggle").click(function(){
        // Скрываем другие раскрывающиеся меню в случае нескольких раскрывающихся списков
        $(".dropdown-menu").not($(this).next()).slideUp("fast");
        
        // Переключаем текущее раскрывающееся меню
        $(this).next(".dropdown-menu").slideToggle("fast");
        
        // Отображение подсказки
        $(".hint").html("A click <b>inside</b> the dropdown is detected.");
    });
 
    // Скрываем раскрывающееся меню при нажатии снаружи
    $(document).on("click", function(event){
        if(!$(event.target).closest(".dropdown").length){
            $(".dropdown-menu").slideUp("fast");
            
            // Отображение подсказки
            $(".hint").html("A click <b>outside</b> the dropdown is detected.");
        }
    });
});
</script>
</head>
<body>
    <p class="hint"><!-- Здесь будет вставлен текст подсказки --></p>
    <ul>
        <li><a href="#">Home</a></li>
        <li><a href="#">About</a></li>
        <li class="dropdown">
            <a href="#" class="dropdown-toggle">Services ▾</a>
            <ul class="dropdown-menu">
                <li><a href="#">Web Design</a></li>
                <li><a href="#">Web Development</a></li>
                <li><a href="#">Graphic Design</a></li>
            </ul>
        </li>
        <li><a href="#">Contact</a></li>
    </ul>
</body>
</html>

Вам следует избегать использования метода stopPropagation() в таких ситуациях, поскольку он нарушает нормальный поток событий в дереве DOM. Это также считается плохой практикой.

Подробнее см. Руководство по распространению событий JavaScript, чтобы узнать, как события распространяются в дереве DOM.

Читайте также

Похожие посты

Как обновить страницу с помощью jQuery

Вы можете просто использовать JavaScript-метод location.reload() для обновления или перезагрузки страницы. Этот метод дополнительно принимает логический параметр true или false. Если указан параметр true, это вызывает постоянную перезагрузку страницы с сервера. Но, если установлен false (по умолчанию) или не указан, браузер может перезагрузить страницу из своего кеша. Давайте посмотрим на пример, чтобы понять, как работает…

Как изменить CSS-свойство display на none или block с помощью jQuery

Вы можете использовать jQuery-метод css(), чтобы изменить значение свойства CSS display на none, block или любое другое значение. Метод css() применяет правила стиля непосредственно к элементам, то есть к встроенным. Следующий пример изменит отображение элемента DIV при нажатии кнопки: В качестве альтернативы, если вы беспокоитесь о начальном значении свойства display элемента, но хотите переключаться между…

Как отображать и скрывать элементы div на основе раскрывающегося списка <select> в jQuery

В следующем примере показано, как отображать и скрывать элементы <div> на основе раскрывающегося списка или выбранного параметра в поле <select> с помощью jQuery-метода change() в сочетании с методами show() и hide(). Блоки <div> в этом примере по умолчанию скрыты с помощью CSS-свойства display, для которого установлено значение none.

Насколько публикация полезна?

Нажмите на звезду, чтобы оценить!

Средняя оценка 5 / 5. Количество оценок: 1

Оценок пока нет. Поставьте оценку первым.