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.没有骰子. 解决方法
如果你看一下
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);没有为该字段创建脚本. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |