Commit 232bcd1d by Qiang Xue

Fixes #5171: Fixed the bug that ActiveForm + Pjax submit event is only triggered once.

parent 2d72bfba
......@@ -4,6 +4,7 @@ Yii Framework 2 Change Log
2.0.0 under development
-----------------------
- Bug #5171: Fixed the bug that ActiveForm + Pjax submit event is only triggered once (qiangxue)
- Bug #5252: Null values are not properly handled by `RangeValidator` (githubjeka, qiangxue)
- Bug #5260: `yii\i18n\Formatter::decimalSeparator` and `yii\i18n\Formatter::thousandSeparator` where not configurable when intl is not installed (execut, cebe)
- Bug #5314: Fixed typo in the implementation of `yii\web\Session::getHasSessionId()` (qiangxue)
......
......@@ -256,9 +256,10 @@
data = $form.data('yiiActiveForm'),
needAjaxValidation = false,
messages = {},
deferreds = deferredArray();
deferreds = deferredArray(),
submitting = data.submitting;
if (data.submitting) {
if (submitting) {
var event = $.Event(events.beforeValidate);
$form.trigger(event, [messages, deferreds]);
if (event.result === false) {
......@@ -324,9 +325,9 @@
delete msgs[this.id];
}
});
updateInputs($form, $.extend(messages, msgs));
updateInputs($form, $.extend(messages, msgs), submitting);
} else {
updateInputs($form, messages);
updateInputs($form, messages, submitting);
}
},
error: function () {
......@@ -336,10 +337,10 @@
} else if (data.submitting) {
// delay callback so that the form can be submitted without problem
setTimeout(function () {
updateInputs($form, messages);
updateInputs($form, messages, submitting);
}, 200);
} else {
updateInputs($form, messages);
updateInputs($form, messages, submitting);
}
});
},
......@@ -349,10 +350,6 @@
data = $form.data('yiiActiveForm');
if (data.validated) {
if (!data.submitting) {
// form is being submitted. Do nothing to avoid duplicated form submission
return false;
}
data.submitting = false;
var event = $.Event(events.beforeSubmit);
$form.trigger(event);
......@@ -472,11 +469,12 @@
* Updates the error messages and the input containers for all applicable attributes
* @param $form the form jQuery object
* @param messages array the validation error messages
* @param submitting whether this method is called after validation triggered by form submission
*/
var updateInputs = function ($form, messages) {
var updateInputs = function ($form, messages, submitting) {
var data = $form.data('yiiActiveForm');
if (data.submitting) {
if (submitting) {
var errorInputs = [];
$.each(data.attributes, function () {
if (!this.cancelled && updateInput($form, this, messages)) {
......
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