2011-11-08 15 views
0

私は管理者がその情報を編集できるようにするユーザーのdataTableを持っています。しかし、問題は、jquery関数をデータテーブルの特定のセルにバインドするには、データテーブル初期化のfnDrawCallbackまたはfnInitCompleteオプションのいずれかに関数をリストすることです。ただし、ユーザーが行を更新し、fnReloadAjaxが実行されると(新しい変更を表示するために)、表のセルにバインドされたすべてのJQueryは使用できなくなります。 私はすべてのJQueryコードをfnDrawCallbackとfnInitCompleteの両方に配置しようとしましたが、どちらも同じ結果を持っています。 アイデアJQuery DataTables - fnReloadAjax()fnDrawCallbackまたはfnInitCompleteをリロードする方法

var oTable = $('.admin_users').dataTable({ 
    "bProcessing": true, 
    "sAjaxSource": 'sql/admin_users.php',  
    "aaSorting": [[ 1, "asc" ]], 
    "bJQueryUI": true, 
    "sPaginationType": "full_numbers", 
    "bStateSave": true, //Use a cookie to save current display of items 
    "aoColumns": [ 
     {"asSorting": [ ]}, 
     null, 
     null, 
     null, 
     { "sType": "date", "sClass":"center" } 
    ], 
    "fnDrawCallback": function(){ 
      //Edit row 
      $('.button_edit').click(function(){ 
       $(':input[type="text"]').val(''); 
       $(':input[type="checkbox"]').removeAttr('checked'); 
       $('.admin_edit_button.button_update').attr('id',$(this).attr('id')); 
       $('.admin_edit_user').slideDown(); 
       var userid = $(this).attr('id'); 
       //GET USER INFO 
       $.ajax({ 
        url: 'sql/admin_edit', 
        type: 'POST', 
        dataType: 'json', 
        data: 'getinfo=true&userid='+userid, 
        success: function(data){ 
         //FILL IN INPUTS WITH USER VALUES 
        } 
       }); 
       //UPDATE CHANGES 
       $('.admin_edit_button.button_update').click(function(){ 
        //GET NEW/UNCHANGED VALUES 
        $.ajax({ 
         url: 'sql/admin_edit.php', 
         type: 'POST', 
         async: false, 
         data: //SEND DATA HERE, 
         success: function(response){ 
          if(response=='true'){ 
           $(':input[type="text"]').val(''); 
           $(':input[type="checkbox"]').removeAttr('checked'); 
           $('.admin_edit_user').slideToggle(function(){oTable.fnReloadAjax()}); 

           alert("Success!"); 
          } 
          if(response=='false') 
           alert('Failed to update user'); 
         }, 
         error: function(response){ 
           alert('Failed to update user'); 
         } 
        }); 
       }); 
      }); 
      $('.button_cancel').click(function(){ 
       $('.admin_edit_user').slideUp(); 
       $(':input[type="text"]').val(''); 
       $(':input[type="checkbox"]').removeAttr('checked'); 
      }); 
    }, 
    "bScrollCollapse": true, 
    "sScrollX": "100%", 
    "fnInitComplete": function() { 
      oTable.fnAdjustColumnSizing(); 
    } 
}); 

答えて

0

あなたは委任を試みることができます。

... 
fnInitCallback: function(settings){ 
    $('tbody',settings.nTableWrapper).delegate('.button_edit', 'click', function(){ 
     // Edit handler 
    }); 

    // Etc. 
} 

tbodyは、Ajaxのリロードで吹き飛ばされるべきではありません。

関連する問題