微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ajax – Yii ClientSide验证渲染部分不起作用

我有一个Yii表单,它调用一个模型的渲染部分(团队has_many team_members).我想通过ajax调用部分视图来添加team / _form中的成员.所有工作(调用,显示,保存)除了ajax验证(服务器和客户端).如果我提交表单,会员的模型不会验证,即使在客户端,它也不会验证必填字段.

任何线索?

//_形成

<?PHP $form=$this->beginWidget('CActiveForm',array(
    'id'=>'team-form','enableAjaxValidation'=>true,'enableClientValidation'=>true,'clientOptions'=>array(
            'validateOnSubmit'=>true,'validateOnChange'=>true

        ),'htmlOptions' => array('enctype' => 'multipart/form-data'),)); ?>

//控制器

public function actionMember($index)
{
    $model = new TeamMember();
        $this->renderPartial('_member',array(
            'model'=> $model,'index'=> $index
        ),false,true
                ); 
}  

public function actionCreate()
{
        $model=new Team;
        $members = array();
        if(isset($_POST['Team']))
        {
                $model->attributes=$_POST['Team'];

                if(!empty($_POST['TeamMember'])){
                foreach($_POST['TeamMember'] as $team_member)
                            {
                                $mem = new TeamMember();
                                $mem->setAttribute($team_member);
                                if($mem->validate(array('name'))) $members[]=$mem;
                            }
                }
                        $this->redirect(array('team/create','id'=>$model->id,'#'=>'submit-message'));

        }

        $members[]=new TeamMember;
        $this->performAjaxMemberValidation($members);
        $this->render('create',array(
                'model'=>$model,'members'=>$members
        ));

}

//_会员

<div class="row-member<?PHP echo $index; ?>">
    <h3>Member <?PHP echo $index+1; ?></h3>
    <div class="row">
    <?PHP echo CHtml::activeLabel($model,"[$index]name",array('class'=>'member')); ?>
    <?PHP echo CHtml::activeTextField($model,array('class'=>'member')); ?>
    <?PHP echo CHtml::error($model,"[$index]name");?>    
    </div>
</div>

ProcessOutput设置为true.没有骰子.
将renderPartial()切换为render().没有骰子.

解决方法

如果你看一下 CActiveForm::run

$cs->registerCoreScript('yiiactiveform');
//...
$cs->registerScript(__CLASS__.'#'.$id,"jQuery('#$id').yiiactiveform($options);");

然后您将了解您的验证将无效,因为您渲染部分而不是整个页面.这些脚本显示页面底部.所以你应该通过执行这些脚本解决这个问题.

部分渲染后,尝试获取应存储在scipts数组中的activeform脚本:

$this->renderPartial('_member',array('model'=> $model,'index'=> $index));
$script = Yii::app()->clientScript->scripts[cclientScript::POS_READY]['CActiveForm#team-form'];

之后,将其与渲染的html一起发送到页面

echo "<script type='text/javascript'>$script</script>"

还记得在你将在页面上附加收到的html之前你应该包括jquery.yiiactiveform.js,如果你还没有(通过渲染另一个表单,或registerCoreScript(‘yiiactiveform’)),在调用ajax请求的页面上.否则将引发javascript错误.

希望这会有所帮助.

编辑:对不起我不明白你是表格的一部分,而不是整体.但是您的验证不会完全适用于同一个问题.因为jQuery(‘#$id’).yiiactiveform($options);没有为该字段创建脚本.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐