diff --git a/lms/static/js/views/fields.js b/lms/static/js/views/fields.js index b36d49b06b45..a157910f9ebd 100644 --- a/lms/static/js/views/fields.js +++ b/lms/static/js/views/fields.js @@ -383,7 +383,16 @@ updateValueInField: function() { var value = (_.isUndefined(this.modelValue()) || _.isNull(this.modelValue())) ? '' : this.modelValue(); - this.$('.u-field-value input').val(value); + + var fieldHasFocus = (document.activeElement === this.$('.u-field-value input')[0]); + var fieldChanged = this.fieldValue() !== value; + if (fieldHasFocus && fieldChanged) { + // Race conidtion between successive user-changed input + // If user changed input after it was submitted before it was saved, + // do nothing, it will be handled by normal finishEditing hooks. + } else { + this.$('.u-field-value input').val(value); + } }, saveValue: function() { @@ -478,7 +487,16 @@ updateValueInField: function() { if (this.editable !== 'never') { - this.$('.u-field-value select').val(this.modelValue() || ''); + var value = this.modelValue() || ''; + var fieldHasFocus = (document.activeElement === this.$('.u-field-value select')[0]); + var fieldChanged = this.fieldValue() !== value; + if (fieldHasFocus && fieldChanged) { + // Race conidtion between successive user-changed input + // If user changed input after it was submitted before it was saved, + // do nothing, it will be handled by normal finishEditing hooks. + } else { + this.$('.u-field-value select').val(value); + } } var value = this.displayValue(this.modelValue() || '');