我想使用CActiveForm的AjaxValidation。
在启用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 之前调用。它应该叫做AFTER jquery.js。 它有点困惑。我该怎么办?
其他 是的,我读了this个问题因为标题非常相似,但问题是不相同。
谢谢。
答案 0 :(得分:3)
您不应该在布局中手动包含jQuery。而不是这样做,而是从Controller
基类中包含它:
public function init() {
Yii::app()->clientScript->registerCoreScript('jquery');
}
不要忘记从具体的控制器中调用parent::init()
。
答案 1 :(得分:1)
似乎CActiveForm使用title
常量在CClientScript::POS_HEAD
标记之前插入脚本。因此,解决方法是添加此代码
<?php
$cs=Yii::app()->clientScript;
$cs->scriptMap=array(
'jquery.js'=>false
);?>
到主布局文件的顶部,以阻止它加载jquery,然后在加载jquery文件后放入title
标记
<script src="<?php echo Yii::app()->request->baseUrl; ?>/js/jquery.js"></script>
这样jquery.yiiactiveform.js将在jquery之后立即加载。
答案 2 :(得分:-2)
只需将自己的jquery放在标签标题上, 就像这样:
<script src="/istanbulcityhotels/js/jquery.js"></script>
<title>your title</title>