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 75c2b987a8f..20244f12e95 100644 --- a/addons/web/static/src/js/views/form/form_renderer.js +++ b/addons/web/static/src/js/views/form/form_renderer.js @@ -52,6 +52,23 @@ var FormRenderer = BasicRenderer.extend({ }); return fieldNames; }, + /** + * @see BasicRenderer.confirmChange + * + * We need to reapply the idForLabel postprocessing since some widgets may + * have recomputed their dom entirely. + * + * @override + */ + confirmChange: function (state, id, fields, e) { + var self = this; + return this._super.apply(this, arguments).then(function (resetWidgets) { + _.each(resetWidgets, function (widget) { + self._setIDForLabel(widget, self.idsForLabels[widget.name]); + }); + return resetWidgets + }); + }, /** * returns the active tab pages for each notebook * @@ -256,7 +273,7 @@ var FormRenderer = BasicRenderer.extend({ }, modifiersOptions || {}); var widget = this._super(node, record, options, modifiersOptions); - widget.getFocusableElement().attr('id', this._getIDForLabel(node.attrs.name)); + this._setIDForLabel(widget, this._getIDForLabel(node.attrs.name)); widget.$el.addClass(FIELD_CLASSES[record.fields[node.attrs.name].type]); this._addFieldClassNames(widget); @@ -730,6 +747,16 @@ var FormRenderer = BasicRenderer.extend({ focusWidget.activate(true); } }, + /** + * Sets id attribute of given widget to idForLabel + * + * @private + * @param {AbstractField} widget + * @param {idForLabel} string + */ + _setIDForLabel: function (widget, idForLabel) { + widget.getFocusableElement().attr('id', idForLabel); + }, //-------------------------------------------------------------------------- // Handlers diff --git a/addons/web/static/tests/fields/basic_fields_tests.js b/addons/web/static/tests/fields/basic_fields_tests.js index fa5b1224728..4d14d47215c 100644 --- a/addons/web/static/tests/fields/basic_fields_tests.js +++ b/addons/web/static/tests/fields/basic_fields_tests.js @@ -120,13 +120,13 @@ QUnit.module('basic_fields', { QUnit.module('FieldBoolean'); QUnit.test('boolean field in form view', function (assert) { - assert.expect(7); + assert.expect(11); var form = createView({ View: FormView, model: 'partner', data: this.data, - arch: '
', + arch: '