summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGéry Debongnie <ged@odoo.com>2017-10-20 17:07:23 +0200
committerGéry Debongnie <ged@odoo.com>2017-10-24 15:39:14 +0200
commit616eedb7e47cc557afbe8bda20cbb490665e4b50 (patch)
tree108b4c61b07a0a0d8dd44d59bb74deec852648d1
parentd58d6e270f4106d717821438490f60bc4f71306e (diff)
[FIX] web: allow onchange to modify origin field
With this commit, we allow an onchange coming from a field to modify the same field. This was not working for field widgets derived from an input field.
-rw-r--r--addons/web/static/src/js/fields/basic_fields.js2
-rw-r--r--addons/web/static/tests/views/form_tests.js36
2 files changed, 37 insertions, 1 deletions
diff --git a/addons/web/static/src/js/fields/basic_fields.js b/addons/web/static/src/js/fields/basic_fields.js
index 7420c1bceff..7a7b3fa370f 100644
--- a/addons/web/static/src/js/fields/basic_fields.js
+++ b/addons/web/static/src/js/fields/basic_fields.js
@@ -206,7 +206,7 @@ var InputField = DebouncedField.extend({
if (!event || event === this.lastChangeEvent) {
this.isDirty = false;
}
- if (this.isDirty || (event && event.target === this)) {
+ if (this.isDirty || (event && event.target === this && event.data.changes[this.name] === this.value)) {
return $.when();
} else {
return this._render();
diff --git a/addons/web/static/tests/views/form_tests.js b/addons/web/static/tests/views/form_tests.js
index 6e72d57ed4b..c6a825b04b1 100644
--- a/addons/web/static/tests/views/form_tests.js
+++ b/addons/web/static/tests/views/form_tests.js
@@ -1112,6 +1112,42 @@ QUnit.module('Views', {
form.destroy();
});
+ QUnit.test('properly apply onchange when changed field is active field', function (assert) {
+ assert.expect(3);
+
+ this.data.partner.onchanges = {
+ int_field: function (obj) {
+ obj.int_field = 14;
+ },
+ };
+ var form = createView({
+ View: FormView,
+ model: 'partner',
+ data: this.data,
+ arch: '<form string="Partners">' +
+ '<group><field name="int_field"/></group>' +
+ '</form>',
+ res_id: 2,
+ viewOptions: {mode: 'edit'},
+ });
+
+
+ assert.strictEqual(form.$('input').val(), "9",
+ "should contain input with initial value");
+
+ form.$('input').val("666").trigger('input');
+
+ assert.strictEqual(form.$('input').val(), "14",
+ "value should have been set to 14 by onchange");
+
+ form.$buttons.find('.o_form_button_save').click();
+
+ assert.strictEqual(form.$('.o_field_widget[name=int_field]').text(), "14",
+ "value should still be 14");
+
+ form.destroy();
+ });
+
QUnit.test('onchange send only the present fields to the server', function (assert) {
assert.expect(1);
this.data.partner.records[0].product_id = false;