2014-12-02 46 views
1

有沒有辦法根據是否選中該列的複選框來過濾數據?我有類似的選項的選中/未選中/清除過濾器,但似乎無法獲得Datatables來過濾。過濾數據表中的已檢查行嗎?

http://jsfiddle.net/anschwem/s827x/68/

$('input[name=lock]').on('click', function(){ 
     var col = '5'; 
     var chkbx = $('#multi').eq(col).find('input[type=checkbox]'); 

     // filter table 
     if($(this).attr('id') == 'locked'){ 
      value = !chkbx.is(':checked')//'y' 
     } else if ($(this).attr('id') == 'unlocked') { 
      value = chkbx.is(':checked')//'n' 
     } else { 
      value = ''; 
     } 

     console.log(value) 

     // filter accordingly 
     table 
      .column(5) 
      .search(value) 
      .draw(); 
    }); 

回答

1

我知道這個問題已經快2歲了,但我找到了解決辦法!

我花了相當一段時間纔剛剛完成這項工作。這裏是我的解決方案:

(這至少需要jQuery的數據表中的1.10版本。)

我有一個動態的dataTable,一旦用戶對屏幕上的選擇時僅填充。表中定義的所有之後,我有這樣的代碼:

$.fn.dataTableExt.afnFiltering.push(
     function (oSettings, aData, iDataIndex) { 
      var val1 = $('input[name=displayIncluded]:checked').val(); 

      if (val1 == "included") { 
       return oSettings.aoData[iDataIndex].nTr.childNodes[10].firstChild.checked; 
      } else if (val1 == "excluded") { 
       return ! oSettings.aoData[iDataIndex].nTr.childNodes[10].firstChild.checked; 
      } else { 
       return true; // include all lines 
      } 
     } 
    ); 

與複選框列是第10列(它是硬編碼,這困擾我,但它必須做)。

我用'All','Included'和'Excluded'設置了單選按鈕,全部都是name ='displayIncluded'。變量val1將加載所選單選按鈕的值。如果複選框被選中,選擇單選按鈕上的'included'將返回true,或選擇'excluded'將返回false。

oSettings.aoData [iDataIndex] .nTr獲取表的完整對象行,其中aoData獲取它的字符串數組表示形式。然後我得到我想要的列(10),firstChild是複選框輸入。

的單選按鈕,我有一個在(「變」)函數調用此:

function displayIncluded() { 
    $('#isbnTable').DataTable().draw(false);} 

希望這有助於有人出來!