Commit 8b0fda82 authored by Dries's avatar Dries

- Patch #825318 by effulgentsia, katbailey: Drupal.attachBehaviors() is called...

- Patch #825318 by effulgentsia, katbailey: Drupal.attachBehaviors() is called an extra time, unnecessarily and for document context, when there is no form.
parent 06ec17f5
......@@ -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);
}
};
/**
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment