0

我有一个看起来像的链接

<a class="fancy" href="/site/feedback">feedback</a>

阿贾克斯调用:

$('.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 验证。我认为,这是因为在 ajax 调用后没有加载一些 Yii 脚本(可能是 yiiActiveForm.js,我不知道)。这种情况的最佳解决方案是什么?

4

2 回答 2

4

我们需要设置$processOutputtrue作为第四个参数。(RenderPartial 后处理默认值为 false。)然后只有$processOutput方法会将注册的客户端脚本插入到适当位置的输出中。

$this->renderPartial('view file', array(data to be available to view file), false, true);
于 2013-07-04T06:52:14.543 回答
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;
于 2012-12-21T10:17:10.907 回答