Выпадающее подменю вложено в другое выпадающее подменю в Bootstrap 4 - PullRequest
0 голосов
/ 06 мая 2020

05/05/20

Я создал меню в Bootstrap, которое выглядит так:

enter image description here

Первоначально морковка рядом с «Веб-обучение» была обращена вниз, как на верхнем уровне «Услуги». И 3 пункта в разделе «Веб-обучение» появятся в нижней части меню. Я хотел, чтобы он оказался справа. Я обнаружил, что если вы используете ".dropright" рядом с ".dropdown", вы получите такой эффект. Мне пришлось изменить структуру моей панели NavBar, но в итоге я получил следующее:

<nav class="navbar navbar-expand-lg navbar-light bg-white"
 style="border: 0px solid red;">
<a class="navbar-brand header-logo-link" asp-controller="Home" asp-action="Index">About CTAS</a>
<button class="navbar-toggler collapsed" type="button" data-toggle="collapse" data-target="#navbarCollapse" aria-controls="navbarCollapse" aria-expanded="false" aria-label="Toggle navigation">
    <span class="navbar-toggler-icon"></span>
</button>
<div class="navbar-collapse collapse" id="navbarCollapse">
    <ul class="navbar-nav mr-auto">
        <li class="nav-item">
            <a class="nav-link"
               asp-controller="Creativity"
               asp-action="Index">
                Creativity
            </a>
        </li>
        <li class="nav-item">
            <a class="nav-link"
               asp-controller="Thinking"
               asp-action="Index">
                Thinking
            </a>
        </li>
        <li class="nav-item">
            <a class="nav-link"
               asp-controller="Solutions"
               asp-action="Index">
                Solutions
            </a>
        </li>
        <!-- Dropdown -->
        <li class="nav-item dropdown">
            <a class="nav-link dropdown-toggle" style="cursor:pointer"
               id="navbarServicesDropdown"
               role="button"
               data-toggle="dropdown"
               aria-haspopup="true"
               aria-expanded="false">
                Services 
            </a>
            <div class="dropdown-menu" aria-labelledby="navbarServicesDropdown">
                <a class="dropdown-item"
                   asp-controller="Services"
                   asp-action="Overview">Services Overview</a>
                <div class="dropdown-divider"></div>
                <a class="dropdown-item"
                   asp-controller="Services"
                   asp-action="WebDesign">Web Design</a>
                <a class="dropdown-item"
                   asp-controller="Services"
                   asp-action="WebArchitecture">Web Architecture</a>
                <a class="dropdown-item"
                   asp-controller="Services"
                   asp-action="DatabaseDesign">Database Design</a>
                <div class="dropdown-divider"></div>
                <div class="dropdown dropright" id="WebTutoringDropdown">
                    <!-- Dropdown button link -->
                    <a class="dropdown-item dropdown-toggle"
                       style="cursor:pointer; color:brown !important;"
                       id="navbarWebTutoringDropdown"
                       role="button"
                       data-toggle="dropdown"
                       @*data-target="#webTutoringMenu"*@
                       aria-haspopup="true"
                       aria-expanded="false"
                       onclick="toggleWebTutoringSubMenu(event);">
                        Web Tutoring
                    </a>
                    <div class="dropdown-menu" id="webTutoringMenu"
                         aria-labelledby="navbarWebTutoringDropdown">
                        <a class="dropdown-item" style="color:brown !important"
                           asp-controller="Services"
                           asp-action="Tutoring">At a glance</a>
                        <a class="dropdown-item" style="color:brown !important"
                           asp-controller="Services"
                           asp-action="Tutoring">Beginning Web Development</a>
                        <a class="dropdown-item" style="color:brown !important"
                           asp-controller="Services"
                           asp-action="Tutoring">Int/Advanced Web Development</a>
                    </div>
                </div>
            </div>
        </li>
        <li class="nav-item">
            <a class="nav-link"
               asp-controller="Pricing"
               asp-action="Index">
                Pricing
            </a>
        </li>
        <div class="dropdown-divider"></div>
        @*<li class="nav-item">
            <a class="nav-link"
               asp-controller="Portfolio"
               asp-action="Index">
                Portfolio
            </a>
        </li>
        <div class="dropdown-divider"></div>*@
        <li class="nav-item">
            <a class="nav-link"
               asp-controller="Contact"
               asp-action="Index">
                Contact Us
            </a>
        </li>
    </ul>
</div>

И я был счастлив, наконец, добраться до него, где я мог нажать на «Веб-обучение "и переместите подменю вправо и получите визуальный эффект, который я искал. Но сейчас у меня с этим возникают всевозможные проблемы.

Если бы я нажал на «Веб-обучение», подэлементы отобразились бы, но если бы я щелкнул по нему снова, либо подэлементы не были go прочь, либо меню «Кто» закроет не только пункты подменю. Я занимаюсь этим уже несколько часов, поэтому я не могу сказать вам, какой именно код вызвал каждую проблему.

Так что я просто не мог добиться естественного поведения Bootstrap, чтобы открывать и закрывать только подэлементы при нажатии на «Веб-обучение», поэтому я начал пытаться вызвать .dropdown () и .collapse ('hide'); непосредственно в подменю.

Итак, я добавил сайт. js и поместил туда эту функцию вместе с глобальной переменной, пытающейся отслеживать, развернуто или свернуто подменю:

var webTutoringSubMenuOn = false;
console.log(`webTutoringSubMenuOn: ${webTutoringSubMenuOn}`);

function toggleWebTutoringSubMenu(ev) {
if (webTutoringSubMenuOn) {
    $('#webTutoringMenu').collapse('hide');
    webTutoringSubMenuOn = false;
    ev.stopPropagation();
} else {
    $('#WebTutoringDropdown').dropdown();
    webTutoringSubMenuOn = true;
    // ev.stopPropagation();
}

console.log(`webTutoringSubMenuOn: ${webTutoringSubMenuOn}`);
}

И подключил вызов к

toggleWebTutoringSubMenu (ev)

в пункте меню «Веб-обучение».

И у меня возникла эта проблема, когда я нажал «Веб-обучение» "и он показывает элементы, я щелкаю по нему еще раз, и все меню исчезает. Но если я go перехожу в консоль JavaScript и набираю вручную:

$('#webTutoringMenu').collapse('hide');

, это работает! Подэлементы go удалены, а меню остается видимым.

Итак, теперь я попал в event.StopPropagation. и казалось, что он работал минуту. Но это не так. это поведение, насколько я могу описать.

1) Нажмите на услуги 2) Нажмите «Веб-обучение», и появятся подпункты. 3) Щелкните еще раз, они исчезнут, пока все хорошо. 4) Щелкните еще раз, и все меню исчезнет.

Консоль javascript дает мне правильные сообщения: webTutoringSubMenuOn: false site. js: 15 webTutoringSubMenuOn: true site. js: 15 webTutoringSubMenuOn: false 5) Щелкните службы еще раз, и появится все меню с развернутыми элементами подменю веб-обучения!?! 6) Щелкните еще раз, и они исчезнут. 7) Нажмите еще раз, они снова появятся 8) Нажмите еще раз, они исчезнут 9) Щелкните еще раз, и все меню исчезнет. site. js: 15 webTutoringSubMenuOn: true

Довольно стабильно, пропадает при каждом четвертом клике. И когда вы снова нажимаете службы, появляется подменю с расширенным подменю.

Две другие проблемы, которые у меня возникают: 1) После второго щелчка по подменю, щелчок «Службы» не закрывает все меню и не закроет его до тех пор, пока не перейдет к первому щелчку. Это означает, что вы нажимаете «Веб-обучение» количество раз за цикл, как описано выше. 2) Также перестали работать ссылки для пунктов подменю 2-го уровня. По крайней мере, для той, которую я подключил: «Краткий обзор».

Достаточно ли умен, чтобы увидеть, что здесь происходит? Я в недоумении. Я скучаю по дням, когда я мог сделать это меню в Fireworks за 10 минут. Я был здесь более 4 с половиной часов.


Обновление 05/06/20

Хорошо, здесь я работаю над одной проблемой за раз. Первое, над чем я работаю, это то, что при каждом третьем щелчке по раскрывающейся ссылке «Веб-службы>» меню «Службы>» закрывается. Когда я снова нажимаю на «Службы>», раскрывающееся меню «Службы» снова становится видимым, а раскрывающееся меню «Веб-обучение» находится в том же состоянии, в котором оно было оставлено, - «Расширено».

Странно, что закрывать родительский раскрывающийся список каждый третий щелчок?

enter image description here


...