Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Корректное переключение dropdown (https://javascript.ru/forum/dom-window/82120-korrektnoe-pereklyuchenie-dropdown.html)

shareware 15.03.2021 10:14

Корректное переключение dropdown
 
Значся чего хочется добиться. Есть дропдаун'ы. 1 открыли, другие все закрылись. Нажали вне открытого дропдауна - закрылся.

HTML:
<li class="dropdown-show"><a class="main-menu-item show-drop" data-drop="learn" href="#">Учебник <span class="icon-down-open-mini"></span></a>
                            <ul class="list-unstyled drop-menu" id="learn">
                                <li><a class="drop-item" href="#">Видео лекции и вебинары</a></li>
                                <li><a class="drop-item" href="#">Для чтения</a></li>
                                <li><a class="drop-item" href="#">Онлайн-поддержка</a></li>
                            </ul>
                        </li>
                        <li class="dropdown-show"><a class="main-menu-item show-drop" data-drop="update" href="#">Обновления <span class="icon-down-open-mini"></span></a>
                            <ul class="list-unstyled drop-menu" id="update">
                                <li><a class="drop-item" href="#">Системные</a></li>
                                <li><a class="drop-item" href="#">Обновление по модулям</a></li>
                                <li><a class="drop-item" href="#">Обновление по документам</a></li>
                            </ul>
                        </li>


Открываю нужный мне dropdown вот так:
$('.show-drop').click(function(){
            var id = $(this).data('drop');
            $('#'+id).fadeIn();
        })


Я понимаю, что для закрывания нужно оперировать через $(document) + e.target, но чет допереть не могу, как корректно построить логику. Помогите пж

рони 15.03.2021 11:15

закрытие по клику вне блока
 
shareware,
<!DOCTYPE html>
<html>

<head>
    <title>Untitled</title>
    <meta charset="utf-8">
    <style type="text/css">
        .drop-menu {
            display: none;
        }
    </style>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
    <script>
        let prev;
        $(document).click(function(event) {
            let li = $(event.target).closest(".dropdown-show");
            if (li.length) {
                let a = $(event.target).closest(".show-drop")
                if (a.length) {
                    let menu = a.next();
                    if (prev && menu[0] !== prev) $(prev).fadeOut();
                    a.next().fadeToggle();
                    prev = menu[0]
                }
            } else if (prev) $(prev).fadeOut();
        });
    </script>
</head>

<body>
    <li class="dropdown-show"><a class="main-menu-item show-drop" data-drop="learn" href="#">Учебник <span class="icon-down-open-mini"></span></a>
        <ul class="list-unstyled drop-menu" id="learn">
            <li><a class="drop-item" href="#">Видео лекции и вебинары</a></li>
            <li><a class="drop-item" href="#">Для чтения</a></li>
            <li><a class="drop-item" href="#">Онлайн-поддержка</a></li>
        </ul>
    </li>
    <li class="dropdown-show"><a class="main-menu-item show-drop" data-drop="update" href="#">Обновления <span class="icon-down-open-mini"></span></a>
        <ul class="list-unstyled drop-menu" id="update">
            <li><a class="drop-item" href="#">Системные</a></li>
            <li><a class="drop-item" href="#">Обновление по модулям</a></li>
            <li><a class="drop-item" href="#">Обновление по документам</a></li>
        </ul>
    </li>
</body>

</html>

shareware 15.03.2021 11:20

Большое спасибо!


Часовой пояс GMT +3, время: 13:42.