加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 02:53:16 所属栏目:百科 来源:网络整理
导读:我有一个Yii表单,它调用另一个模型的渲染部分(团队has_many team_members).我想通过ajax调用部分视图来添加team / _form中的成员.所有工作(调用,显示,保存)除了ajax验证(服务器和客户端).如果我提交表单,会员的模型不会验证,即使在客户端,它也不会验证必填字
我有一个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);没有为该字段创建脚本.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读