2012-03-02 32 views
21

Tôi đang sử dụng chức năng 'fnDrawCallback' để thay đổi trang. Về cơ bản nó giải quyết được mục đích của tôi. Điều duy nhất là tôi phải chỉ định hàm đó khi tôi đang khởi tạo đối tượng dataTable. Có cách nào tôi có thể làm điều đó sau khi khởi tạo?Thay đổi trang có thể thay đổi trang gọi lại

Ví dụ: tôi đang làm như thế này:

$("#tableID").dataTables({'fnDrawCallBack':functionName}); 

tôi muốn làm như thế này:

var oTable = $("#tableID").dataTables(); 
oTable.fnDrawCallback = functionName; // or something like this 

Giải pháp:

oTable.aoDrawCallback.push(functionObj); 
var functionObj = { 
    fn: funtionName 
}; 
+0

Tôi muốn biết có cách nào tôi có thể chỉ định hàm đó sau khi khởi tạo đối tượng dataTable không. – emphaticsunshine

+0

Tôi có thể chỉ định sự kiện AJAX pageLoad sau khi khởi tạo không ?? – emphaticsunshine

+0

http://stackoverflow.com/questions/7407111/detect-page-change-on-datatable – trante

Trả lời

19

Bạn có thể truy cập cài đặt dữ liệu nội bộ của DataTables để thao tác mảng gọi lại vẽ (aoDrawCallback, không phải fnDrawCallback trong nội bộ - mảng của nó vì có thể có nhiều cuộc gọi lại) hoặc (và tôi sẽ đề xuất) bạn có thể thêm 'vẽ 'nghe sự kiện:

var oTable = $("#tableID").dataTables(); 
$(oTable).bind('draw', functionName); 

các sự kiện sa thải bởi DataTables được ghi nhận ở đây: http://datatables.net/docs/DataTables/1.9.0/#summary_events

+0

Sự kiện ràng buộc không hoạt động trong phiên bản dữ liệuTôi đang sử dụng. Nhưng cảm ơn bạn vì một gợi ý tốt. – emphaticsunshine

+0

aoDrawCallback đã làm việc cho tôi. Tôi phải đẩy một đối tượng trong mảng đó và hàm của bạn phải là thuộc tính fn của hàm đó. – emphaticsunshine

+0

Sự kiện ràng buộc $ (oTable) .bind() dường như hoạt động với các phiên bản mới hơn 1.9.2+. – jjwdesign

5

NẾU bạn có một phiên bản lớn hơn 1.8, bạn có thể sử dụng để đạt các sự kiện thay đổi trang:

$('#myTable').on('page', function() {...}); 

Hy vọng điều này sẽ hữu ích!

+1

Cảm ơn bạn đang làm việc +1 cho bạn. –

+0

@NikhilAgrawal cảm ơn! Vui mừng nó đã giúp! – streetlight

+0

Trong trường hợp của tôi, tôi đã sử dụng "page.dt" nhưng điều này chỉ hoạt động trên trang thứ ba của tôi vì một lý do nào đó. –

1

Thay vì hai cuộc gọi riêng biệt, chỉ cần thêm một .bind() trước khi .dataTable(), như sau đó chạy một hàm setMouseDown bất cứ khi nào có sự thay đổi trang xảy ra (kể cả hiển thị trang đầu tiên):

$('#myTable') 
    .bind('page', setMouseDown()) 
    .dataTable( 
    { 
     bJQueryUI: true, 
     ... Other Init Stuff Here ... 
    }); 
Các vấn đề liên quan