diff --git a/src/editable-form/editable-form.js b/src/editable-form/editable-form.js index eccd3f3..8d2dd9b 100644 --- a/src/editable-form/editable-form.js +++ b/src/editable-form/editable-form.js @@ -257,6 +257,29 @@ Editableform is linked with one of input types, e.g. 'text', 'select' etc. this.$div.triggerHandler('save', {newValue: newValue, response: response}); }, this)) .fail($.proxy(function(xhr) { + var res = typeof this.options.fail === 'function' ? this.options.fail.call(this.options.scope, xhr, newValue) : null; + + //if fail callback returns false --> keep form open and do not activate input + if (res === false) { + this.error(false); + this.showForm(false); + return; + } + + //if fail callback returns string --> keep form open, show error and activate input + if (typeof res === 'string') { + this.error(res); + this.showForm(); + return; + } + + //if fail callback returns object like {newValue: <something>} --> use that value instead of submitted + //it is usefull if you want to chnage value in url-function + if (res && typeof res === 'object' && res.hasOwnProperty('newValue')) { + this.value = res.newValue; + } + + //use the default behavior this.error(typeof xhr === 'string' ? xhr : xhr.responseText || xhr.statusText || 'Unknown error!'); this.showForm(); }, this)); @@ -494,6 +517,22 @@ Editableform is linked with one of input types, e.g. 'text', 'select' etc. **/ success: null, /** + Fail callback. Called when the call to the server failed. + Useful when you want to display a custom message for an error response. + If it returns **string** - the return value will be displayed in the error block + If it returns **object like** <code>{newValue: <something>}</code> - it overwrites value, submitted by user. + Otherwise newValue simply rendered into element. + + @property fail + @type function + @default null + @example + fail: function(response, newValue) { + return response.responseText || response.statusText || 'Unknown error!' + } + **/ + fail: null, + /** Additional options for submit ajax request. List of values: http://api.jquery.com/jQuery.ajax @@ -537,7 +576,7 @@ Editableform is linked with one of input types, e.g. 'text', 'select' etc. @default false @since 1.2.0 **/ - savenochange: false + savenochange: false }; /*