【问题标题】:Yii, Fancybox and ajax-loaded dataYii、Fancybox 和 ajax 加载的数据
【发布时间】:2012-12-08 11:48:19
【问题描述】:

我有一个看起来像

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

【问题讨论】:

  • 请在加载反馈表单的位置显示您的 ajax 代码
  • 添加到帖子中,但它很简单,花哨的盒子自己做我的工作。

标签: ajax validation yii fancybox


【解决方案1】:

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

$this->renderPartial('view file', array(data to be available to view file), false, true);

【讨论】:

  • 非常有用的答案@venu
【解决方案2】:

嗯,你需要用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;

【讨论】:

  • 我在控制器中做,但服务器只向我发送我的表单的 html,没有任何 js。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多