Yii Ajax表单仅对一个字段进行验证

时间:2014-03-20 10:58:18

标签: php jquery yii

我的模型注册表单中有一个电子邮件字段,其他字段包括姓名,国家/地区,年龄。

我必须在电子邮件字段上执行 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验证。

请帮我发送大量时间。

由于

3 个答案:

答案 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

请参阅ValidateenableAjaxValidation api文档,详细了解其工作原理