2016-08-04 38 views
1

我有表,看起來像這樣:enter image description here如何捕捉那些具有分頁數據表複選框的值插件

正如你可以看到有旁的複選框用戶,其值我需要捕捉,如果他們被選中。我做到了與此代碼之前沒有足夠的用戶對分頁工作:

var cbChecked = new Array(); 
$("input[type='checkbox']:checked").each(function() { 
     cbChecked[cbChecked.length] = this.value; 
}); 

但自從我使用DataTables插件,和分頁拆分用戶,jQuery是唯一能夠看到所顯示的複選框在當前頁面上,即使我在表格的第2頁上有兩個用戶被選中。當我檢查頁面時,我發現在DOM中只有這些人顯示,其他人甚至沒有隱藏。任何建議怎麼做來捕獲我的表中的所有選中的複選框?

+0

Poz Ognjen,去檢查[這個小提琴](https://jsfiddle.net/gyrocode/07Lrpqm7/),你會看到如何從數據表實例中獲取所有錶行。他使用:'var rows = table.rows({'search':'applied'})。nodes();',than'$('input [type =「checkbox」]',rows)' – skobaljic

+0

This helps,非常感謝。 – Ognj3n

+0

您可以發佈自己的問題的答案,它可以幫助他人。 – skobaljic

回答

1

這裏是代碼,對於這類問題的工作:

var tableUsers = $('#showUsersTable').DataTable({ 
      searching:false, 
      "sPaginationType": "full_numbers", 
      "bPaginate": true, 
      "bLengthChange": true, 
      "bFilter": true, 
      "bSort": false, 
      "bInfo": true, 
      "bAutoWidth": false, 
      "bProcessing": true 
     }); 

首先實例數據表。這些屬性並不重要,我需要它們用於其他的東西。

var rows = tableUsers.rows({ 'search': 'applied' }).nodes(); 

這個變量rows包含所有td元素,即使它們沒有顯示在頁面上,並且在DOM無形。

  $('input[type="checkbox"]', rows).each(function(i,e){ 
       $(e).change(function(){ 
        var checkBoxC = []; 
        var cbChecked = new Array(); 
        $('input[type="checkbox"]:checked', rows).each(function(o,a){ 
         checkBoxC[checkBoxC.length]=$(a).val(); 
         $.each(checkBoxC, function(h, el){ 
          if($.inArray(el, cbChecked) === -1) cbChecked.push(el); 
         }); 
        }); 
        $("input#cbChecked").val(cbChecked.join()); 
       }); 
      }); 

由於cbChecked聲明中change功能,我需要把它的數值爲隱藏DOM元素(input#cbChecked),所以我可以使用它的變化的功能範圍。