diff --git a/CHANGELOG.txt b/CHANGELOG.txt
index ec3175a..eb7dcf4 100644
--- a/CHANGELOG.txt
+++ b/CHANGELOG.txt
@@ -4,8 +4,9 @@ X-editable changelog
Version 1.2.1 wip
----------------------------
+[enh] 'hidden' event: added possible value of reason param - 'nochange'. Occurs when form is submitted but value was not changed (vitalets)
[enh] 'submit' method changed: error-callback's parameter simplified (vitalets)
-[enh] 'submit' method changed: now when response 200 OK it does not set pk automatically, use success callback (vitalets)
+[enh] 'submit' method changed: now when response 200 OK it does not set pk automatically (vitalets)
[enh] 'submit' method changed: removed dataType='json'. Use 'ajaxOptions' to specify dataType if needed (vitalets)
[enh] removed default ajax dataType='json'. Use 'ajaxOptions' to specify dataType if needed (vitalets)
[enh] select: do not show 'sourceError' in element during autotext execution (vitalets)
diff --git a/src/containers/editable-container.js b/src/containers/editable-container.js
index 1094c46..84aa882 100644
--- a/src/containers/editable-container.js
+++ b/src/containers/editable-container.js
@@ -80,9 +80,8 @@ Applied as jQuery method.
.editableform(this.formOptions)
.on({
save: $.proxy(this.save, this),
- cancel: $.proxy(function(){
- this.hide('cancel');
- }, this),
+ cancel: $.proxy(function(){ this.hide('cancel'); }, this),
+ nochange: $.proxy(function(){ this.hide('nochange'); }, this),
show: $.proxy(this.setPosition, this), //re-position container every time form is shown (occurs each time after loading state)
rendering: $.proxy(this.setPosition, this), //this allows to place container correctly when loading shown
rendered: $.proxy(function(){
@@ -146,7 +145,7 @@ Applied as jQuery method.
/**
Hides container with form
@method hide()
- @param {string} reason Reason caused hiding. Can be save|cancel|onblur|undefined (=manual)
+ @param {string} reason Reason caused hiding. Can be save|cancel|onblur|nochange|undefined (=manual)
**/
hide: function(reason) {
if(!this.tip() || !this.tip().is(':visible') || !this.$element.hasClass('editable-open')) {
@@ -159,7 +158,7 @@ Applied as jQuery method.
@event hidden
@param {object} event event object
- @param {string} reason Reason caused hiding. Can be save|cancel|onblur|undefined (=manual)
+ @param {string} reason Reason caused hiding. Can be save|cancel|onblur|nochange|undefined (=manual)
@example
$('#username').on('hidden', function(e, reason) {
if(reason === 'save' || reason === 'cancel') {
diff --git a/src/editable-form/editable-form.js b/src/editable-form/editable-form.js
index a8d5b35..e0a9a6e 100644
--- a/src/editable-form/editable-form.js
+++ b/src/editable-form/editable-form.js
@@ -179,11 +179,16 @@ Editableform is linked with one of input types, e.g. 'text', 'select' etc.
return;
}
- //if value not changed --> cancel
+ //if value not changed --> trigger 'nochange' event and return
/*jslint eqeq: true*/
if (!this.options.savenochange && this.input.value2str(newValue) == this.input.value2str(this.value)) {
/*jslint eqeq: false*/
- this.cancel();
+ /**
+ Fired when value not changed but form is submitted. Requires savenochange = false.
+ @event nochange
+ @param {Object} event event object
+ **/
+ this.$div.triggerHandler('nochange');
return;
}
diff --git a/test/unit/api.js b/test/unit/api.js
index de1146d..1ec92f2 100644
--- a/test/unit/api.js
+++ b/test/unit/api.js
@@ -79,8 +79,8 @@ $(function () {
e.editable();
});
- asyncTest("events: shown / hidden (reason: cancel, onblur, manual)", function () {
- expect(11);
+ asyncTest("events: shown / hidden (reason: cancel, onblur, nochange, manual)", function () {
+ expect(15);
var val = '1', test_reason,
e = $('').appendTo(fx);
@@ -113,6 +113,13 @@ $(function () {
e.parent().click();
ok(!p.is(':visible'), 'popover closed');
+ test_reason = 'nochange'
+ e.click();
+ p = tip(e);
+ ok(p.is(':visible'), 'popover shown');
+ p.find('form').submit(); //submit value without changes
+ ok(!p.is(':visible'), 'popover closed');
+
test_reason = 'manual'
e.click();
p = tip(e);