2

我想使用CActiveFormAjaxValidation

在启用 AjaxValidation 之前,我的布局视图文件是这样的:

<html lang="tr-TR" dir="ltr">
<head>
<script src="<?php echo Yii::app()->request->baseUrl; ?>/js/jquery.js"></script>
</head>

如您所见,我在布局页面上调用jquery框架(因为我在每个页面上都使用)。

我决定使用 CActiveForm 的 ajax 验证。enableAjaxValidation首先在调用时启用:

<?php $form=$this->beginWidget('CActiveForm', array(
    'id'=>'otel-form',
    'enableAjaxValidation'=>true,
)); ?>

然后在我的控制器上取消注释

$this->performAjaxValidation($model);

但我得到了$(...).yiiactiveform is not a function错误。当我检查页面的源代码时:

如您所见,还包括了另外一个 jquery 库。所以页面上有2个jquery文件。因此,我遇到了错误。接下来我放了这样的东西来禁用jquery。

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

现在 jquery 只加载一次。但是这个结果是:

<html lang="tr-TR" dir="ltr">
<head>
<script type="text/javascript" src="/istanbulcityhotels/assets/cb2686c8/jquery.yiiactiveform.js"></script>
<script src="/istanbulcityhotels/js/jquery.js"></script>
</head>

jquery.yiiactiveform.js在jquery.js之前调用。它应该在 jquery.js 之后调用。有点糊涂了。我应该怎么办?

附加 是的,我读了这个问题,因为标题非常相似,但问题一样。

谢谢你。

4

3 回答 3

3

您不应该在布局中手动包含 jQuery。不要这样做,而是将其包含在您的Controller基类中:

public function init() {
    Yii::app()->clientScript->registerCoreScript('jquery');
}

不要忘记parent::init()从您的具体控制器中调用。

于 2013-01-24T13:08:41.870 回答
1

似乎 CActiveFormtitle使用CClientScript::POS_HEAD常量在标记之前插入脚本。所以解决方法是添加此代码

<?php
$cs=Yii::app()->clientScript;
$cs->scriptMap=array(
    'jquery.js'=>false
);?>

到主布局文件的顶部,以阻止它加载 jquery,然后title在加载 jquery 文件后放置标签

<script src="<?php echo Yii::app()->request->baseUrl; ?>/js/jquery.js"></script>

这样 jquery.yiiactiveform.js 将在 jquery 之后立即加载。

于 2015-10-18T03:20:26.223 回答
-2

只需将您自己的 jquery 放在标签标题上,就像这样:

<script src="/istanbulcityhotels/js/jquery.js"></script>
<title>your title</title>
于 2013-11-13T05:00:19.703 回答