Yii客户端验证不起作用

时间:2012-04-11 13:31:05

标签: php jquery yii

“body”标签内有一个链接页面 插入链接后,将在fancybox中呈现以下视图。

<div class="form">
    <?php
                $model = new User;
        $model->scenario='registration';
        $form=$this->beginWidget('CActiveForm', array(
        'id'=>'signup-form',
                'action'=>'/signup/',
        'enableClientValidation'=>true,
        'clientOptions'=>array(
            'validateOnSubmit'=>true,
        ),
    )); ?>

        <p class="note">Fields with <span class="required">*</span> are required.</p>

        <div class="row">
            <?php echo $form->labelEx($model,'username'); ?>
            <?php echo $form->textField($model,'username'); ?>
            <?php echo $form->error($model,'username'); ?>
        </div>

        <div class="row">
            <?php echo $form->labelEx($model,'password'); ?>
            <?php echo $form->passwordField($model,'password'); ?>
            <?php echo $form->error($model,'password'); ?>
        </div>


        <div class="row buttons">
            <?php echo CHtml::submitButton('sign up',array('name'=>'submit')); ?>
        </div>

    <?php $this->endWidget(); ?>
    </div><!-- form -->

如果在没有fancybox的情况下插入上面的代码,则会正确插入客户端验证脚本,但是在fancybox中没有插入到页面的jQuery验证函数。
可能是什么问题?
(siteController代码是故意插入的)

2 个答案:

答案 0 :(得分:1)

您的问题很可能是您将HTML发送到Fancybox的方式。如果你做一个renderPartial(由user1248203提到),你需要确保你有一个renderPartial后处理发回的视图(后处理包括你想要与视图本身一起呈现的javascript / css文件)。

有关CController page

的更多信息

另外需要注意的一点是:当您进行后期处理时,您需要确保Fancybox的Javascript(以及可能的jQuery等)不会再次发回。它可能会导致一些令人困惑的问题。要防止文件通过Ajax重新发送,请使用:

Yii::app()->clientScript->scriptMap['jquery.js'] = false;
Yii::app()->clientScript->scriptMap['jquery.min.js'] = false;
Yii::app()->clientscript->scriptMap['jquery-ui.min.js'] = false;
etc.

另请注意,当您在开发服务器上调试时,会发送jquery.js(YII_DEBUG设置为true),但在生产服务器上发送jquery.min.js(其中YII_DEBUG设置为false)。这让我感到困惑:-)你可以在framework/web/js/packages.php

中看到它的定义

答案 1 :(得分:0)

是从Ajax调用(renderPartial)调用代码还是直接调用代码? Ajax调用(renderPartial)包含javascript验证函数,只有整个页面都有。