Commit c0746f06 by Qiang Xue

Fixes issue #588: Added afterValidate to ActiveForm.

parent 1a02a4d5
...@@ -41,6 +41,9 @@ ...@@ -41,6 +41,9 @@
// a callback that is called before validating each attribute. The signature of the callback should be: // a callback that is called before validating each attribute. The signature of the callback should be:
// function ($form, attribute, messages) { ...return false to cancel the validation...} // function ($form, attribute, messages) { ...return false to cancel the validation...}
beforeValidate: undefined, beforeValidate: undefined,
// a callback that is called after an attribute is validated. The signature of the callback should be:
// function ($form, attribute, messages)
afterValidate: undefined,
// the GET parameter name indicating an AJAX-based validation // the GET parameter name indicating an AJAX-based validation
ajaxVar: 'ajax' ajaxVar: 'ajax'
}; };
...@@ -333,6 +336,9 @@ ...@@ -333,6 +336,9 @@
$input = findInput($form, attribute), $input = findInput($form, attribute),
hasError = false; hasError = false;
if (data.settings.afterValidate) {
data.settings.afterValidate($form, attribute, messages);
}
attribute.status = 1; attribute.status = 1;
if ($input.length) { if ($input.length) {
hasError = messages && $.isArray(messages[attribute.name]) && messages[attribute.name].length; hasError = messages && $.isArray(messages[attribute.name]) && messages[attribute.name].length;
......
...@@ -12,6 +12,7 @@ use yii\base\Widget; ...@@ -12,6 +12,7 @@ use yii\base\Widget;
use yii\base\Model; use yii\base\Model;
use yii\helpers\Html; use yii\helpers\Html;
use yii\helpers\Json; use yii\helpers\Json;
use yii\web\JsExpression;
/** /**
* ActiveForm ... * ActiveForm ...
...@@ -103,6 +104,38 @@ class ActiveForm extends Widget ...@@ -103,6 +104,38 @@ class ActiveForm extends Widget
*/ */
public $ajaxVar = 'ajax'; public $ajaxVar = 'ajax';
/** /**
* @var string|JsExpression a JS callback that will be called when the form is being submitted.
* The signature of the callback should be:
*
* ~~~
* function ($form) {
* ...return false to cancel submission...
* }
* ~~~
*/
public $beforeSubmit;
/**
* @var string|JsExpression a JS callback that is called before validating an attribute.
* The signature of the callback should be:
*
* ~~~
* function ($form, attribute, messages) {
* ...return false to cancel the validation...
* }
* ~~~
*/
public $beforeValidate;
/**
* @var string|JsExpression a JS callback that is called after validating an attribute.
* The signature of the callback should be:
*
* ~~~
* function ($form, attribute, messages) {
* }
* ~~~
*/
public $afterValidate;
/**
* @var array the client validation options for individual attributes. Each element of the array * @var array the client validation options for individual attributes. Each element of the array
* represents the validation options for a particular attribute. * represents the validation options for a particular attribute.
* @internal * @internal
...@@ -157,6 +190,11 @@ class ActiveForm extends Widget ...@@ -157,6 +190,11 @@ class ActiveForm extends Widget
if ($this->validationUrl !== null) { if ($this->validationUrl !== null) {
$options['validationUrl'] = Html::url($this->validationUrl); $options['validationUrl'] = Html::url($this->validationUrl);
} }
foreach (array('beforeSubmit', 'beforeValidate', 'afterValidate') as $name) {
if (($value = $this->$name) !== null) {
$options[$name] = $value instanceof JsExpression ? $value : new JsExpression($value);
}
}
return $options; return $options;
} }
......
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