2013-03-17 18 views
5

Tôi đang cố gắng thực hiện một chức năng kiểm tra tất cả các hộp kiểm trong DataTable, bao gồm cả các hàng ẩn. Dưới đây là đoạn code html cho cột "checkbox":kiểm tra tất cả các hộp kiểm trong DataTable bao gồm các hàng ẩn

<div class="usersTable" id="userTable"> 
    <table cellpadding="0" cellspacing="0" id="customersList" > 
     <thead> 
      <tr> 
       <th><input type="checkbox" name="selectall" id="selectall" class="selectall"/></th> 
       <th width="200">val1</th> 
       <th width="80px">val2</th> 
       <th width="70px">val3</th> 
       <th width="450">val4</th> 
       <th width="60px">val5</th> 
      </tr> 
     </thead> 
     <tbody> 
      <tr> 
       <td></td> 
       <td></td> 
       <td></td> 
       <td></td> 
       <td></td> 
       <td></td> 
      </tr> 
     </tbody> 
    </table> 
</div> 

nút Submit:

<input type='button' value='select all' id='selectallboxes' name='selectallboxes' /> 

Và mã JQuery đó không làm việc:

$(function() {   
    otable = $('#customersList').dataTable({ 
     "bJQueryUI": true, 
     "sPaginationType": "full_numbers", 
     "aLengthMenu" : [ [10,20,50,100,1000], [10,20,50,100,1000] ], 
     "iDisplayLength": 100, 
     "bProcessing": true, 
     "bServerSide": true, 
     "aaSorting":[],   
     "iDisplayStart": 0, 
     "sAjaxSource": "filename", 
     .... 

$("#selectallboxes").click (function() { 
     alert(dt.fnGetNodes().length + ' is total number') 
     var selected = new Array(); 
     $('input', dt.fnGetNodes()).each(function() { 
       $(this).attr('checked','checked'); 
       selected.push($(this).val());      
     }); 
     // convert to a string 
     var mystring = selected.length; 
     alert(mystring); 
}) 
+0

Điều gì sẽ xảy ra nếu bạn thay đổi '$ (" # selectallboxes "). Nhấp vào' thành '$ (" # selectall "). – darshanags

+0

@darshangs Điều đó sẽ chỉ tạo ra một sự kiện bấm cho các hộp kiểm thực tế không phải là chọn tất cả các nút, vấn đề là logic trong sự kiện bấm không phải là xử lý –

+0

@DavidBarker Lỗi của tôi. Tôi đã đọc câu hỏi không chính xác. – darshanags

Trả lời

0

Ok, vì vậy đây phải là những gì bạn đang theo dõi, điều này sẽ tìm tất cả trang hiện tại của <tr> và chuyển qua chúng bằng cách sử dụng dataTables _ API. Bạn có thể thay đổi bộ lọc cho phù hợp với nhu cầu của bạn để chọn các hàng khác nhau nếu bạn muốn, đây là tất cả các tài liệu trong tài liệu datatables.

$("#selectallboxes").click (function() 
{ 
    var selected = new Array(); 

    // Use the _ function instead to filter the rows to the visible 
    var data = oTable._('tr', {"filter":"applied"}); 

    $.each(data, function(key, index) 
    { 
     var input = $(this).find('input[type="checkbox"]'); 

     input.attr('checked', 'checked'); 

     selected.push(input.val()); 
    }); 

    // convert to a string 
    var mystring = selected.length; 

    alert(mystring); 
}); 
+0

nó không hoạt động không may. Kết quả là như nhau với quá khứ. – Farhad

+0

chỉ cần phát hiện, bạn đang đặt trong một thẻ , họ sẽ cần phải ở trong số cho '' fnGetNodes() 'để chọn chúng –

+0

Tôi đã thêm dòng này vào đường thẳng đứng của hàm của tôi để nhận được kết quả tốt hơn: ** cảnh báo (otable.fnGetNodes(). length + 'là tổng số hàng') ** nhưng điều này trả lại số phần tử trên trang đầu tiên! – Farhad

8

Hãy thử:

$("#selectallboxes").click(function() { 
    var selected = new Array(); 
    $(otable.fnGetNodes()).find(':checkbox').each(function() { 
     $this = $(this); 
     $this.attr('checked', 'checked'); 
     selected.push($this.val()); 
    }); 
    // convert to a string 
    var mystring = selected.join(); 
    alert(mystring); 
}); 

.length mang đến cho bạn độ dài của mảng. Tôi đã sử dụng join() để tham gia mảng thành chuỗi. .fnGetNodes() của DataTable cung cấp cho bạn tất cả các hàng trong bảng bao gồm cả các hàng ẩn.

+0

Nó không hoạt động. – Farhad

+0

Tôi đoán vì "bServerSide" là đúng, tôi phải xử lý nó ở phía máy chủ. Tôi nghĩ trong trường hợp này, tất cả dữ liệu không tìm nạp trước. – Farhad

+2

+1 cho dòng mã này $ (otable.fnGetNodes()). Tìm (': checkbox') mỗi cái, bạn lưu ngày của tôi – pkachhia

0

Hãy thử một cái gì đó giống như

$("#selectallboxes").click (function() { 
    var selected = []; 
    $('input:checkbox', otable).each(function() { 
     selected.push($(this).prop('checked', true).val());      
    }); 
    // convert to a string 
    alert(selected.join()); 
}) 
0

fnGetNodes() sẽ cung cấp chỉ có các hàng có thể nhìn thấy, có một phần mở rộng để có được những hàng ẩn do fnGetHiddenNodes pagination(), nhưng điều đó sẽ làm việc với jquery phiên bản DataTable 1,9, có bản cập nhật cho cùng trong jquery datatable 1.10 nhưng điều này không hoạt động. Bạn có thể lưu trữ dữ liệu của bạn nhận được từ yêu cầu ajax trong một mảng và sau đó dựa trên điều kiện của sự kiện nhấp vào hộp kiểm vẽ lại bảng với dữ liệu và đầu vào (hộp kiểm) với thuộc tính đã chọn.