2012-02-02 3 views
5

私はこの質問が、こことYiiサイトの両方で数多く尋ねられていることを知っていますが、それぞれの解決策を経ても解決策が得られません。私は根本的に何かをやっていると確信しています。あなたがまだこれを読んでいるなら、ここには何も行きません。Yii - jQueryがレンダリング後に機能しない

私は、CheckBoxListウィジェットがロードされているページを持っています。これは、完全にうまく動作するCGridViewをリフレッシュするchange()jQuery関数呼び出しを持っています。また、clickイベントを持つcheckBoxListの各アイテムに関連するスパンがあります。

このクリックイベントは、順番にビューを「部分的にレンダリングする」コントローラを呼び出します -

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


$this->widget('ext.xxx.EModelWidget', array(
'name' => $widget_name, 
'manufacturer_id' => $manufacturer_id, 
    ) 
); 

と、対応するウィジェットコードをDBから$データをフェッチした後、CheckBoxListのを印刷します。あなたが見ることができるように

echo CHtml::checkBoxList($this->name, array(), $data, array(
     'class' => 'modelFilter', 
     'separator' => '', 
     'template' => '<div>{input} {label}</div>', 
     'id' => 'dummyID', 
    )); 

、私はモデルフィルタ今

私はちょうど表示するには、メインビューファイル内のスクリプトを持っていることをチェックボックスとして表示される各要素のクラス名を入れていますクラスmodelFilterのcheckBoxがクリックされたときの警告ボックス。

Yii::app()->clientScript->registerScript('model-selected', " 
$('input.modelFilter').change(function(){ 
    alert('Hellpo!'); 
    }); 
"); 

残念ながら、これは起こりません。

私はすべてのフォーラムで読んだことがある2つの一般的な解決策が

であるA)のYii ::アプリ() - > clientscript->スクリプトマップ[ 'jquery.jsは'] = falseの。あなたは私が正式に従ったことを見ることができます。

b)$ resultおよび$ processOutputパラメータは、それぞれ、falseおよびtrueにする必要があります。、これも私が従ったものです。

私の質問は、YiiでAjaxを使って読み込まれたコンテンツに変更機能を追加するだけです。

+0

私が理解する限り、clickイベントはAJAXリクエストを発生させますか?この場合、応答にjQuery JavaScriptが含まれているかどうかを確認できますか?もしそうなら、これはあなたのjQueryを再初期化し、あなたのJavaScriptロジックを混乱させるかもしれませんが、processOutputを 'false'に設定することでこれを無効にできます。 – schmunk

答えて

7

私が正しく理解している場合は、チェックボックスのリストをロードする前に$('input.modelFilter').change()に電話しています。イベントハンドラは、呼び出しの後に挿入された要素にバインドされないように使用されます。

イベントを直接バインドする代わりに、委任されたイベントを使用する必要があります。私は内部のJavaScriptで部分的にレンダリングされたHTMLを返されたAjax呼び出し(のYiiのCActiveFormによって自動生成を行った後、私は、同様の問題があった

$("body_or_input_container").on("change", "input.modelFilter", function(e){ 
    //callback 
}); 
+0

私はこれをチェックして、あなたに戻ってきます!返信ありがとう –

+0

男、あなたは救い主です。 –

0

OK、部分的にレンダリングされたファイルのjQueryスクリプトを部分的にレンダリングされたファイル自体に含めることができました。

このスタイルが正しいかどうかを知りたいです。

+0

しかし、これは非常に良い解決策ではありません。メインビューページにあるgridViewを更新することもできません! : –

4

(「ダイレクトと委任イベント」で検索)http://api.jquery.com/on/:を見てみましょう)jQueryプラグインがもう認識されなかったので、すべてが壊れていました。

私は、部分的にjQueryライブラリを送信していて、以前に初期化されたもの(特に、他のプラグイン、私の場合はUIダイアログ)を「忘れる」ことによって再初期化することを発見しました。 唯一の修正点は、Yiiが部分的にjQuery.js自体を含めず、他のJSファイルを含めるように指示することでした。

これを部分の先頭に置きます。

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

ページロード時にjQueryを一度ロードするように設定する必要があることに注意してください。目の場合

+0

ありがとう、私は同じ問題がありました。奇妙なフレームワーク。 – Magicode

0

は、JavaScriptの既存のオブジェクトを破棄れるrenderPartial

例えば

私はそれは我々が)(レンダリングを使用する場合完璧に動作しますが、パセリオブジェクトを認識しませんパセリJのバリデーションを持つフォームを持っています。私の場合はオブジェクトを再初期化する必要があります。

$( "#form")。parsley();

関連する問題