diff --git a/addons/website/static/src/snippets/s_searchbar/000.js b/addons/website/static/src/snippets/s_searchbar/000.js index 8c04fa45827..256994d7715 100644 --- a/addons/website/static/src/snippets/s_searchbar/000.js +++ b/addons/website/static/src/snippets/s_searchbar/000.js @@ -11,7 +11,7 @@ publicWidget.registry.searchBar = publicWidget.Widget.extend({ events: { 'input .search-query': '_onInput', 'focusout': '_onFocusOut', - 'keydown .search-query': '_onKeydown', + 'keydown .search-query, .dropdown-item': '_onKeydown', 'search .search-query': '_onSearch', }, autocompleteMinWidth: 300, @@ -242,8 +242,13 @@ publicWidget.registry.searchBar = publicWidget.Widget.extend({ case $.ui.keyCode.DOWN: ev.preventDefault(); if (this.$menu) { - let $element = ev.which === $.ui.keyCode.UP ? this.$menu.children().last() : this.$menu.children().first(); - $element.focus(); + const focusableEls = [this.$input[0], ...this.$menu[0].children]; + const focusedEl = document.activeElement; + const currentIndex = focusableEls.indexOf(focusedEl) || 0; + const delta = ev.which === $.ui.keyCode.UP ? focusableEls.length - 1 : 1; + const nextIndex = (currentIndex + delta) % focusableEls.length; + const nextFocusedEl = focusableEls[nextIndex]; + nextFocusedEl.focus(); } break; case $.ui.keyCode.ENTER: