diff options
-rw-r--r-- | misc/ajax.js | 26 |
1 files changed, 18 insertions, 8 deletions
diff --git a/misc/ajax.js b/misc/ajax.js index a9588261b..0c83d7776 100644 --- a/misc/ajax.js +++ b/misc/ajax.js @@ -189,8 +189,14 @@ Drupal.ajax = function (base, element, element_settings) { */ Drupal.ajax.prototype.beforeSerialize = function (element, options) { // Allow detaching behaviors to update field values before collecting them. - var settings = this.settings || Drupal.settings; - Drupal.detachBehaviors(this.form, settings, 'serialize'); + // This is only needed when field values are added to the POST data, so only + // when there is a form such that this.form.ajaxSubmit() is used instead of + // $.ajax(). When there is no form and $.ajax() is used, beforeSerialize() + // isn't called, but don't rely on that: explicitly check this.form. + if (this.form) { + var settings = this.settings || Drupal.settings; + Drupal.detachBehaviors(this.form, settings, 'serialize'); + } }; /** @@ -249,12 +255,14 @@ Drupal.ajax.prototype.success = function (response, status) { } } - // Reattach behaviors that were detached in beforeSerialize(). The + // Reattach behaviors, if they were detached in beforeSerialize(). The // attachBehaviors() called on the new content from processing the response // commands is not sufficient, because behaviors from the entire form need // to be reattached. - var settings = this.settings || Drupal.settings; - Drupal.attachBehaviors(this.form, settings); + if (this.form) { + var settings = this.settings || Drupal.settings; + Drupal.attachBehaviors(this.form, settings); + } Drupal.unfreezeHeight(); @@ -306,9 +314,11 @@ Drupal.ajax.prototype.error = function (response, uri) { $(this.wrapper).show(); // Re-enable the element. $(this.element).removeClass('progress-disabled').attr('disabled', false); - // Reattach behaviors that were detached in beforeSerialize(). - var settings = response.settings || this.settings || Drupal.settings; - Drupal.attachBehaviors(this.form, settings); + // Reattach behaviors, if they were detached in beforeSerialize(). + if (this.form) { + var settings = response.settings || this.settings || Drupal.settings; + Drupal.attachBehaviors(this.form, settings); + } }; /** |