0

我正在使用RenderPartial生成CListView并且所有内容都正确生成并且良好的分页也可以正常工作。但是,当我将自定义 JS 添加到由CListview它生成的元素时,它对于第一页内容工作正常,但是当我使用分页并单击第 2 页时,JS 绑定失败。

有没有其他方法可以将自定义事件绑定到CListview我尝试使用 live 时在 YII 中生成的元素,而我的 js 文件对我来说毫无用处。

我想我必须在每次加载 ajax 时调用我的函数,但是如何在 yii 中实现

这是我用来通过按钮单击更新服务器上的评级的脚本,这是定义这些表单和按钮的元素由CListviewyii生成

$(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

$.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 回答
0

这个问题可以通过两种方式解决:

  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 回答