我的链接看起来像
<a class="fancy" href="/site/feedback">feedback</a>
Ajax电话:
$('.fancy').fancybox({
wrapCSS: 'custom-fancy',
padding: 0,
type: 'ajax'
});
点击fancybox加载内容,控制器发送。
$this->renderPartial('_feedback')
反馈意见:
<?php
/* @var $this Controller */
/* @var $model FeedbackForm */
/* @var $form CActiveForm */
$form = $this->beginWidget('CActiveForm', array(
'id' => 'feedback-form',
'enableClientValidation' => TRUE,
)); ?>
<div><?= $form->textArea($model, 'feedback') ?></div>
<?=$form->error($model, 'feedback')?>
<? $this->widget('CCaptcha') ?>
<?=$form->textField($model, 'verifyCode', array('placeholder' => 'Captcha code'))?>
<div><?=CHtml::submitButton('Send', array('class' => 'r button'))?></div>
<? $this->endWidget() ?>
问题是这个加载的表单上没有javascript / ajax验证。我想,这是因为一些Yii脚本在ajax调用后没有加载(yiiActiveForm.js也许,我不知道)。 这种情况的最佳解决方案是什么?
答案 0 :(得分:4)
我们需要将 $ processOutput 设置为 true 作为第四个参数。 ( RenderPartial后处理默认值为false 。)然后只有 $ processOutput 方法会将注册的客户端脚本插入到适当位置的输出中。
$this->renderPartial('view file', array(data to be available to view file), false, true);
答案 1 :(得分:3)
好吧,你需要用javascript加载一些代码
$output = $this->renderPartial('_feedback', array(), true)
// you need set layout to false for render only your form
Yii::app()->clientScript->render($output);
// where you need remove jquery for prevent double initiation's jquery script
// it's not worked example!!!
preg_replace('@<script type="text/javascript" src="jquery.js"></script>@mi', '', $output);
// well, we may output
echo $output;