我的模型注册表单中有一个电子邮件字段,其他字段包括姓名,国家/地区,年龄。
我必须在电子邮件字段上执行 ajax验证 onChange事件。
我设置了我的视图以启用ajax验证。
我的问题是ajax验证适用于所有字段,不仅适用于电子邮件,我只需要对一个字段onChange事件执行此操作。
这是我的观点
$form=$this->beginWidget('bootstrap.widgets.TbActiveForm', array(
'id'=>'Login-Form',
'enableClientValidation'=>true,
'enableAjaxValidation'=>true,
'clientOptions'=>array(
'validateOnSubmit'=>true,
),
));
echo $form->errorSummary($loginForm);
echo $form->textFieldRow($loginForm, 'email');
echo $form->textFieldRow($loginForm, 'name');
echo $form->textFieldRow($loginForm, 'age');
echo $form->textFieldRow($loginForm, 'country');
这是我的模特
public function rules()
{
return array(
array('email, country, name', 'required'),
array('email', 'checkEmail')
);
}
// custom function to check email
public function checkEmail($attribute, $params)
{
$this->addError($attribute,strtr('email exsit before',$params));
}
如何在没有ajax验证的情况下,仅为电子邮件和客户端上的其他文件(国家/地区,名称,年龄)启用ajax验证。
请帮我发送大量时间。
由于
答案 0 :(得分:1)
将表单clientOption设置为更改,如下所示:
$form=$this->beginWidget('bootstrap.widgets.TbActiveForm', array(
'id'=>'Login-Form',
'enableClientValidation'=>true,
'enableAjaxValidation'=>true,
'clientOptions'=>array(
'validateOnSubmit'=>true,
'validateOnChange'=>true,
因此,在更改时,它可以触发验证 这可以通过在验证触发器上将第4个参数设置为false来完成。
<?php echo $form->error($model,'email', array(), false); ?>
答案 1 :(得分:0)
在您的模型中设置此
public function rules()
{
return array(
array('email, country, name', 'required'),
array('email', 'unique'), //check if email already exist
array('email', 'email'),
);
}
控制器中的
<?php
class SiteController extends CController {
.... // Other functions
public function actionLogin(){ // Your corresponding action
$model= new LoginForm(); // Your actual model name
$_POST['ajax'] === 'Login-form' make sure that login form is the same as your form name in view
if (isset($_POST['ajax']) && $_POST['ajax'] === 'Login-form') {
echo CActiveForm::validate($model,);
Yii::app()->end();
}
... // Remaining action logic
在您的视图中
$form=$this->beginWidget('bootstrap.widgets.TbActiveForm', array(
'id'=>'Login-Form',
'enableClientValidation'=>false,
'enableAjaxValidation'=>true,
'clientOptions'=>array(
'validateOnSubmit'=>false,
'validateOnChange'=>false,
'validateOnType' => true,
答案 2 :(得分:-1)
要通过ajax执行验证,除了在表单视图中启用enableAjaxValidation
之外,首先需要在控制器中调用辅助函数
在你的Controller中(我假设SiteController,因为这是一个登录表单)
<?php
class SiteController extends CController {
.... // Other functions
public function actionLogin(){ // Your corresponding action
$model= new LoginForm(); // Your actual model name
if (isset($_POST['ajax']) && $_POST['ajax'] === 'login-form') {
echo CActiveForm::validate($model,array('email'));
Yii::app()->end();
}
... // Remaining action logic
请参阅Validate和enableAjaxValidation api文档,详细了解其工作原理