0

我正在使用 Yii 创建我的网页。当我创建页面时,Yii 创建了一个与以下非常相似的表单:

<?php
/* @var $this SiteController */
/* @var $model ContactForm */
/* @var $form CActiveForm */

$this->pageTitle=Yii::app()->name . ' - Contact';
$this->breadcrumbs=array(
'Contact',
);
?>

<?php if(Yii::app()->user->hasFlash('contact')): ?>

<div class="flash-success">
    <?php echo Yii::app()->user->getFlash('contact'); ?>
</div>

<?php else: ?>

<div class="form">

<?php $form=$this->beginWidget('CActiveForm', array(
'id'=>'contact-form',
'enableClientValidation'=>true,
'clientOptions'=>array(
    'validateOnSubmit'=>true,
),
)); ?>

<p class="note"><?php echo Yii::t('app','Fields with');?> <span class="required">*</span> <?php echo Yii::t('app','are required.');?></p>

<?php echo $form->errorSummary($model); ?>

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

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

<div class="row">
    <?php echo $form->labelEx($model,'subject'); ?>
    <?php echo $form->textField($model,'subject',array('size'=>60,'maxlength'=>128)); ?>
    <?php echo $form->error($model,'subject'); ?>
</div>

<div class="row">
    <?php echo $form->labelEx($model,'body'); ?>
    <?php echo $form->textArea($model,'body',array('rows'=>6, 'cols'=>50)); ?>
    <?php echo $form->error($model,'body'); ?>
</div>

<?php if(CCaptcha::checkRequirements()): ?>
<div class="row">
    <?php echo $form->labelEx($model,'verifyCode'); ?>
    <div>
    <?php $this->widget('CCaptcha'); ?>
    <?php echo $form->textField($model,'verifyCode'); ?>
    </div>
    <div class="hint"><?php echo Yii::t('app','Please enter the letters as they are shown in the image above.');?>
    <br/><?php echo Yii::t('app','Letters are not case-sensitive.');?></div>
    <?php echo $form->error($model,'verifyCode'); ?>
</div>
<?php endif; ?>

<div class="row buttons">
    <?php echo CHtml::submitButton('Submit'); ?>
</div>

<?php $this->endWidget(); ?>

</div><!-- form -->

<?php endif; ?> 

一开始,这种形式很有效,但在那之后,我改进了网页,添加了更多功能。几分钟前,我检查了所有页面,发现重新加载验证码按钮不起作用。现在,当我尝试重新加载验证码时,网页会重新加载并显示一个带有以下代码的空白页面:

{"hash1":774,"hash2":774,"url":"\/MyApp\/site\/captcha.html?v=526045d3d1187"}

我试图在谷歌中搜索一些类似的错误,但我没有找到任何东西。老实说,我不明白发生了什么。我猜我在网页的另一个文件中添加的代码会产生这个错误,但我不知道......我不明白这段代码是什么意思。

拜托我需要你的帮忙!

有人可以帮助我吗?谢谢

编辑:

如果我在浏览器上查看网页的源代码,然后搜索“captcha.html”,我可以看到以下代码:

<script type="text/javascript">
/*<![CDATA[*/
jQuery(function($) {
jQuery('#yw0').after("<a id=\"yw0_button\" href=\"\/MyApp\/site\/captcha.html?refresh=1    \">Obtenga un nuevo c\u00f3digo<\/a>");
jQuery(document).on('click', '#yw0_button', function(){
jQuery.ajax({
    url: "\/MyApp\/site\/captcha.html?refresh=1",
    dataType: 'json',
    cache: false,
    success: function(data) {
        jQuery('#yw0').attr('src', data['url']);
        jQuery('body').data('captcha.hash', [data['hash1'], data['hash2']]);
    }
});
return false;
});

但我在任何地方都没有找到 captcha.html ......

编辑2: 我发现了问题。我在 Wep 页面的主页末尾添加了 javascript 代码。我添加了这个:

<script type="text/javascript" src="<?php echo Yii::app()->theme->baseUrl; ?>/scripts/jquery-1.4.1.min.js"></script>
<script type="text/javascript" src="<?php echo Yii::app()->theme->baseUrl; ?>/scripts/jquery-ui-1.8.12.custom.min.js"></script>
<script type="text/javascript" src="<?php echo Yii::app()->theme->baseUrl; ?>/scripts/jquery-photostack.js"></script>
<script type="text/javascript" src="<?php echo Yii::app()->theme->baseUrl; ?>/scripts/jquery-coin-slider.min.js"></script>

如果我删除此代码,则可以正确重新加载验证码。拜托,有人可以告诉我我在这里做得不好吗?为什么我的javascript代码会产生这个?我该如何解决?

4

1 回答 1

0

问题是CCaptcha Yii 小部件中的这段代码:

jQuery(document).on('click', '$selector', function(){
    jQuery.ajax({
    ...
    });
    return false;
});

单击侦听器位于文档上,而不是元素本身。当你在这段代码之后添加你的脚本标签时,你会加载一个新的 jQuery 版本,它会在 init 上清除所有这些侦听器。

为了解决这个问题,只使用一个 jQuery 版本,最好是 Yii 包含一个。

如果你真的想替换它,请按照正确的方式进行,CClientScript->scriptMap在 config 中,将 valuejquery.jsjquery.min.jskeys 设置为 jQuery 的新 URL。

于 2014-04-01T17:23:27.453 回答