2011-11-08 25 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重新加載吹走。

相關問題