0

私はRenderPartial生成に使用してCListViewおり、すべてのコンテンツが適切に生成され、適切なページ付けも正常に機能しています。しかし、カスタムJSを生成された要素に追加するとCListview、最初のページコンテンツでは正常に機能しますが、ページ付けを使用して2ページをクリックすると、JSバインディングが失敗します。

ライブを使用して試したYIICListviewで生成された要素にカスタムイベントをバインドする他の方法はありますか?私にとっては何も機能しませんが、ここに私のjsファイルがあります。

私はすべてのajaxロードで関数を呼び出さなければならないと思いますが、yiiでどのように達成できますか

これは、ボタンクリックでサーバーの評価を更新するために使用しているスクリプトであり、これらのフォームとボタンが定義されている要素はCListview、yiiで生成されます。

$(document).ready(function(){
    $('form[id^="rating_formup_"]').each(function() {
        $(this).live('click', function() {
            alert("hi");
            var profileid=  $(this).find('#profile_id').attr('value');
            var userid=  $(this).find('#user_id').attr('value');  
            console.log(userid);
            var data = new Object();
            data.profile_id=profileid;
            data.user_id=userid;
            data.liked="Liked";
            $.post('profile_rating_ajax.php', data, handleAjaxResponse);
            return false;     
       });
    });
});
4

3 に答える 3

1

CGridView.afterAjaxUpdateを試すこともできます:

'afterAjaxUpdate' => 'js:applyEventHandlers'
于 2012-06-08T13:18:24.263 に答える
0

この問題は、次の2つの方法で解決できます。

  1. そのイベントを受信するすべてのアイテムに「onclick」html定義を使用し、要素を生成するときに、$dataのIDをjs関数に渡します。たとえば、「表示」ページ内:

    echo CHtml::htmlButton('click me', array('onclick'=>'myFunction('.$data->id.')');
    
  2. フレームワークと同様に、イベントハンドラーを「body」にバインドします。それらはajaxの更新後も存続します:

    $('body').on('click','#myUniqueId',funcion(){...});
    
于 2012-06-08T13:13:05.330 に答える
0

$ .eachメソッドは既存の要素でのみループするため、ライブバインダーはajaxで生成されたコンテンツを見ることができません。

このように試してみませんか:

$(document).ready(function(){
  $('form[id^="rating_formup_"]').live('click', function() {
      alert("hi");
      var profileid=  $(this).find('#profile_id').attr('value');
      var userid=  $(this).find('#user_id').attr('value');  
      console.log(userid);
      var data = new Object();
      data.profile_id=profileid;
      data.user_id=userid;
      data.liked="Liked";
      $.post('profile_rating_ajax.php', data, handleAjaxResponse);
      return false;     
   });
});
于 2012-06-16T18:06:46.680 に答える