有我的表格:
$form = ActiveForm::begin([
'id' => 'user-create-form',
'enableAjaxValidation' => true,
'enableClientValidation' => false,
'validationUrl' => Url::toRoute(Yii::$app->controller->id . '/validation'),
'validateOnType' => true,
]);
JS-script在此表单上注册,并根据.keyup()
事件的一些规则执行俄语到英语的音译。音译结果已添加到samname
字段。
UserCreateForm
模型中有验证规则:
public function rules()
{
return [
[['samname'], 'validateUserExist'],
];
}
public function validateUserExist()
{
$check = Yii::$app->CustomComponents->checkUserExist($this->samname);
if ($check) {
$errorMessage = 'User exists: ' . $check;
$this->addError('samname', $errorMessage);
}
}
函数checkUserExist()
检查已创建名称的存在,并在匹配大小写时返回错误。
控制器上有动作:
public function actionValidation()
{
$model = new UserCreateForm();
if (\Yii::$app->request->isAjax && $model->load(\Yii::$app->request->post())) {
\Yii::$app->response->format = Response::FORMAT_JSON;
echo json_encode(ActiveForm::validate($model));
\Yii::$app->end();
}
}
效果很好,执行验证,匹配大小写返回错误......
但是!
需要再次运行JS脚本并在出错时将下一个字母添加到名称(JS-script提供此功能)。如何在验证器返回错误后再次运行JS脚本?
答案 0 :(得分:0)
@yafater感谢您的帮助!我找到了解决方案。
$('form').on('afterValidateAttribute', function (event, attribute, message) {
if (attribute.name === 'samname')
{
$.ajax({
url: "url-to-action",
type: "POST",
dataType: "json",
data: $(this).serialize(),
success: function(response) {
if ( typeof(response["form-samname"]) != "undefined" && response["form-samname"] !== null ) {
// code here
}
},
});
return false;
}
});