Виджет меню jQueryUI: collapseAll не сворачивает все подупорядоченные слои - PullRequest
0 голосов
/ 04 августа 2020

Я имею дело с виджетом меню jqueryUI и получил неправильное поведение.

Посмотрите на следующие фрагменты кода и схему меню ниже: Как видите, меню открыто до третьего уровня. Я намерен закрыть весь второй пункт меню одним щелчком мыши. Итак, я хочу щелкнуть «Элемент 2», и все соответствующие подэлементы должны исчезнуть (2.x, 2.xx). К сожалению, в настоящее время мне нужно дважды щелкнуть элемент главного меню, чтобы достичь этого.

Элемент 1

- Элемент 1.1

Элемент 2

- Позиция 2.1

- Позиция 2.2

--- Позиция 2.2.1

--- Позиция 2.2.2

--- Позиция 2.2. 3

- Элемент 2.3

Ответственная функция структурирована следующим образом:

 collapseAll: function (event, all) {
            clearTimeout(this.timer);
            this.timer = this._delay(function () {
                // If we were passed an event, look for the submenu that contains the event
                var currentMenu = all ? this.element :
                    $(event && event.target).closest(this.element.find(".ui-menu"));

                // If we found no valid submenu ancestor, use the main menu to close all sub menus anyway
                if (!currentMenu.length) {
                    currentMenu = this.element;
                }

                this._close(currentMenu);

                this.blur(event);
                this.activeMenu = currentMenu;
            }, this.delay);
      }

,

Есть идеи?

1 Ответ

0 голосов
/ 04 августа 2020

Я исправил эту ошибку. Причиной такого поведения была не функция collapseAll, а функция закрытия, которая вызывается из этого.

Теперь он работает с этим кодом:

_close: function( startMenu ) {
    if ( !startMenu ) {
        startMenu = this.active ? this.active.parent() : this.element;
    }

    startMenu
        .find( ".ui-menu" )
        .hide()
        .attr( "aria-hidden", "true" )
        .attr( "aria-expanded", "false" )
        .end()
        .find( ".ui-state-active" )//.not( ".ui-state-focus" )
        .removeClass( "ui-state-active" );
},
...