PrimeFaces.widget.TieredMenu.prototype.findNextItem = function(menuitem) { var nextitem = menuitem.nextAll('.ui-menuitem').first(); if (!nextitem.length) { var nextSubmenu = menuitem.closest('ul.ui-menu-list').next( '.ui-menu-list'); if (!nextSubmenu.length) { nextSubmenu = menuitem.closest('td').next('td').children( '.ui-menu-list:visible:first'); } if (nextSubmenu.length) { nextitem = nextSubmenu.find('li.ui-menuitem:visible:first'); } } return nextitem; }; PrimeFaces.widget.TieredMenu.prototype.findPrevItem = function(menuitem) { var previtem = menuitem.prevAll('.ui-menuitem').first(); if (!previtem.length) { var prevSubmenu = menuitem.closest('ul.ui-menu-list').prev( '.ui-menu-list'); if (!prevSubmenu.length) { prevSubmenu = menuitem.closest('td').prev('td').children( '.ui-menu-list:visible:last'); } if (prevSubmenu.length) { previtem = prevSubmenu.find('li.ui-menuitem:visible:last'); } } return previtem; }; PrimeFaces.widget.TieredMenu.prototype.getFirstMenuList = function(submenu) { return submenu.find('.ui-menu-list:not(.ui-state-disabled):first'); }; PrimeFaces.widget.TieredMenu.prototype.isRootLink = function(menuitem) { var submenu = menuitem.closest('ul'); return submenu.parent().hasClass('ui-menu'); }; PrimeFaces.widget.TieredMenu.prototype.bindKeyEvents = function() { var $this = this; $this.cfg.vertical = true; this.keyboardTarget .on('focus.menubar', function(e) { $this.highlight($this.links.eq(0).parent()); }) .on('blur.menubar', function() { $this.reset(); }) .on( 'keydown.menu', function(e) { var currentitem = $this.activeitem; if (!currentitem) { return; } var isRootLink = $this.isRootLink(currentitem), keyCode = $.ui.keyCode; switch (e.which) { case keyCode.LEFT: if (isRootLink && !$this.cfg.vertical) { var prevItem = currentitem .prevAll('.ui-menuitem:first'); if (prevItem.length) { $this.deactivate(currentitem); $this.highlight(prevItem); } e.preventDefault(); } else { if (currentitem.hasClass('ui-menu-parent') && currentitem.children( '.ui-menu-child') .is(':visible')) { $this.deactivate(currentitem); $this.highlight(currentitem); } else { var parentItem = currentitem.closest( 'ul.ui-menu-child').parent(); if (parentItem.length) { $this.deactivate(currentitem); $this.deactivate(parentItem); $this.highlight(parentItem); } } } break; case keyCode.RIGHT: if (isRootLink && !$this.cfg.vertical) { var nextItem = currentitem .nextAll('.ui-menuitem:not(.ui-menubar-options):first'); if (nextItem.length) { $this.deactivate(currentitem); $this.highlight(nextItem); } e.preventDefault(); } else { if (currentitem.hasClass('ui-menu-parent')) { var submenu = currentitem .children('.ui-menu-child'); if (submenu.is(':visible')) { $this .highlight(submenu .children('.ui-menuitem:first')); } else { $this.activate(currentitem); $this .highlight(submenu .children('.ui-menuitem:first')); } } } break; case keyCode.UP: if (!isRootLink || $this.cfg.vertical) { var prevItem = $this.findPrevItem(currentitem); if (prevItem.length) { $this.deactivate(currentitem); $this.highlight(prevItem); } } e.preventDefault(); break; case keyCode.DOWN: if (isRootLink && !$this.cfg.vertical) { var submenu = currentitem .children('ul.ui-menu-child'); if (submenu.is(':visible')) { var firstMenulist = $this .getFirstMenuList(submenu); $this .highlight(firstMenulist .children('.ui-menuitem:visible:first')); } else { $this.activate(currentitem); } } else { var nextItem = $this.findNextItem(currentitem); if (nextItem.length) { $this.deactivate(currentitem); $this.highlight(nextItem); } } e.preventDefault(); break; case keyCode.ENTER: var currentLink = currentitem .children('.ui-menuitem-link'); currentLink.trigger('click'); $this.jq.blur(); // PrimeFaces.utils.openLink(e, currentLink); break; } }); };