2

ajax を介して別のビュー内でレンダリングした後、私の ajax リンクが機能しません。それを防ぐために、ajaxでデリゲート関数を使用しました。最初のビューではうまく機能していますが、2 番目のページではクリックに対して複数のリクエストを送信します。

これが私のコードです:

$i=0;
foreach($contents as $conts){

   echo CHtml::ajaxLink(conts->name, 
       array('frontend/dataView','id'=> $conts->content_id,'cat_id'=>$cat->parent_id ), 
       array('update'=>'#level3rd','beforeSend'=>'function(){$(\'body\').undelegate(\'#cont'.$i.'\', \'click\');}',),
       array('id'=>'cont'.$i,'onclick'=>"makeContactive(this.id);"));
$i++;
}
4

3 に答える 3

0

onclick イベントは、動的に読み込まれたコンテンツでは機能しません。

古い jQuery では、クリックを .live('click') (1.7 より前) にバインドするために渡します。jQuery 1.7 以降では、.on('click') を使用できます。

私がしたのと同じ間違いをしないでください。

$('#myAnchor').on('click', myclickFunction)

これはページロードでは問題なく機能しますが、動的コンテンツでは機能しません。それを行う正しい方法はです。

$('#parentElement').on('click', '#myAnchor', 'customEvenName', myclickFunction)

ここでの親要素は、動的にロードされないものでなければなりません

これらすべての実際の利点は、.on('click') イベントをどこにでも配置できることです。通常は、含める js スクリプトのどこかに配置できるため、すべてのイベントが 1 回だけロードされます。

于 2013-01-18T07:33:21.517 に答える
0

これが当てはまるかどうかはわかりませんが...ページが読み込まれた後、いくつかのことがjqueryに関連付けられています。

たとえば、私は選択を使用します。選択したドロップダウンを特定のクラスを持つすべてのドロップダウンに結び付ける機能があります。コードを Ajax で持ってきた場合、これらのドロップダウンは選択されたものを使用しません。これは、それらすべてを結び付ける関数が最初に 1 回実行されたためです。ドロップダウンを選択済みで再度動作させたい場合は、ajax 呼び出しを行った後に、選択済みを選択に結び付ける関数を再実行する必要があります。

これはあなたのajaxリンクにも当てはまりませんか?

于 2013-01-18T05:31:03.980 に答える
0

おそらく、次の方法でビューをレンダリングしています。

$this->renderPartial($view, $params);

これを試して:

$this->renderPartial($view, $params, false, true);
于 2012-10-26T13:09:37.260 に答える