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エラーが発生しました。ページのソースコードを確認すると:

ご覧のとおり、もう 1 つの jquery ライブラリも含まれています。したがって、ページには 2 つの jquery ファイルがあります。このため、エラーが発生しています。次に、jqueryを無効にするためにこのようなものを置きます。

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

現在、jquery は 1 回だけロードされています。しかし、この結果は次のとおりです。

<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

CActiveForm は、定数titleを使用してタグの前にスクリプトを挿入しているようです。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 に答える