diff --git a/addons/web/static/src/js/views/form/form_renderer.js b/addons/web/static/src/js/views/form/form_renderer.js
index 2b91c5820ee..97e3cbd8cb0 100644
--- a/addons/web/static/src/js/views/form/form_renderer.js
+++ b/addons/web/static/src/js/views/form/form_renderer.js
@@ -303,6 +303,28 @@ var FormRenderer = BasicRenderer.extend({
//--------------------------------------------------------------------------
// Private
//--------------------------------------------------------------------------
+
+ /**
+ * Activates the first visible tab from a given list of tab objects. The
+ * first tab having an "autofocus" attribute set will be focused in
+ * priority.
+ *
+ * @private
+ * @param {Object[]} tabs
+ */
+ _activateFirstVisibleTab(tabs) {
+ const visibleTabs = tabs.filter(
+ (tab) => !tab.$header.hasClass("o_invisible_modifier")
+ );
+ const autofocusTab = visibleTabs.findIndex(
+ (tab) => tab.node.attrs.autofocus === "autofocus"
+ );
+ const tabToFocus = visibleTabs[Math.max(0, autofocusTab)];
+ if (tabToFocus) {
+ tabToFocus.$header.find('.nav-link').addClass('active');
+ tabToFocus.$page.addClass('active');
+ }
+ },
/**
* @override
*/
@@ -932,7 +954,6 @@ var FormRenderer = BasicRenderer.extend({
var self = this;
var $headers = $('
');
var $pages = $('');
- var autofocusTab = -1;
// renderedTabs is used to aggregate the generated $headers and $pages
// alongside their node, so that their modifiers can be registered once
// all tabs have been rendered, to ensure that the first visible tab
@@ -941,9 +962,6 @@ var FormRenderer = BasicRenderer.extend({
var pageID = _.uniqueId('notebook_page_');
var $header = self._renderTabHeader(child, pageID);
var $page = self._renderTabPage(child, pageID);
- if (autofocusTab === -1 && child.attrs.autofocus === 'autofocus') {
- autofocusTab = index;
- }
self._handleAttributes($header, child);
$headers.append($header);
$pages.append($page);
@@ -953,11 +971,6 @@ var FormRenderer = BasicRenderer.extend({
node: child,
};
});
- if (renderedTabs.length) {
- var tabToFocus = renderedTabs[Math.max(0, autofocusTab)];
- tabToFocus.$header.find('.nav-link').addClass('active');
- tabToFocus.$page.addClass('active');
- }
// register the modifiers for each tab
_.each(renderedTabs, function (tab) {
self._registerModifiers(tab.node, self.state, tab.$header, {
@@ -967,13 +980,12 @@ var FormRenderer = BasicRenderer.extend({
if (modifiers.invisible && $link.hasClass('active')) {
$link.removeClass('active');
tab.$page.removeClass('active');
- var $firstVisibleTab = $headers.find('li:not(.o_invisible_modifier):first() > a');
- $firstVisibleTab.addClass('active');
- $pages.find($firstVisibleTab.attr('href')).addClass('active');
+ self.inactiveNotebooks.push(renderedTabs);
}
},
});
});
+ this._activateFirstVisibleTab(renderedTabs);
var $notebookHeaders = $('