flexbe banner 468x60flexbe banner 728x90flexbe banner 930x180jivo banner 468x60jivo banner 728x90jivo banner 930x180skillbox banner 468x60skillbox banner 728x90skillbox banner 930x180

Как определить клик вне элемента с помощью jQuery

Вы можете использовать свойство 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.

beget banner 480x320beget banner 728x90beget banner 120x600skillbox banner 480x320skillbox banner 728x90skillbox banner 120x600etxt banner 480x320etxt banner 728x90etxt banner 120x600

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

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

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

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

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

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

Как на jQuery написать код, который при клике на кнопку будет копировать текущий url сайта?

Вот пример кода на jQuery, который копирует текущий URL сайта в буфер обмена при нажатии на кнопку с классом copy-current-url: Как это работает: Этот подход работает в большинстве браузеров. Однако, если вы используете современные методы, можно также заменить document.execCommand на API navigator.clipboard, если поддержка браузера это позволяет.
Подробнее

Как на jQuery отслеживать событие ввода символов?

Для отслеживания события ввода символов на jQuery можно использовать событие input. Оно срабатывает каждый раз, когда происходит изменение в поле ввода (например, при наборе текста или удалении символов). Вот пример: В этом примере: Если нужно отследить событие только при изменении текста (например, при нажатии клавиш), можно использовать событие keyup, но input более универсально, так как…
Подробнее

Как на jQuery можно отслеживать изменение текстового тега

В jQuery изменение текста внутри тега можно отслеживать несколькими способами, в зависимости от того, как это изменение происходит. Основной подход — это использовать MutationObserver, так как он позволяет отслеживать изменения в DOM. Вот пример: 1. Использование MutationObserver 2. Событие через пользовательское изменение Если текст изменяется через jQuery или JavaScript (например, с помощью .text() или .html()),…
Подробнее