2014-02-27 26 views
5

我需要從已選中複選框(位於第一個可見列中)的Jquery Datatables的隱藏列中獲取值。到目前爲止,我已經得到了如何從JQuery數據表中獲取包含複選框的行

bodytable$ = $('#dataTable').dataTable({ 
    "bJQueryUI" : true, 
    "bPaginate" : true, 

    "bSort" : false, 
    "bFilter": false,  
    "aoColumns": [{"bVisible": false}, 
        {"bVisible": true}, 
        {"bVisible": true}, 
        {"bVisible": true}], 

    "oLanguage": { 
     "sEmptyTable": '', 
     "sInfoEmpty": '', 
     "sZeroRecords": '' 
    } 
}); 

,我與

var checkIds = []; 

    $('input[type="checkbox"]:checked', bodytable$.fnGetNodes()).each(function(i){ 
     var tr = $(this).closest('tr'); 
     var rowData = bodytable$.fnGetData(tr); 
     checkIds.push(rowData[0]); 
    }); 
    alert(checkIds); 

這無法上線 VAR rowData = bodytable $ .fnGetData(TR)正從隱藏的列中的值; 與Firefox調試給出的錯誤消息TypeError:a.nodeName是未定義的

我必須經過DataTable API,因爲隱藏的列實際上並沒有出現在加載到瀏覽器中的HTML,因爲我想成爲能夠在所選複選框不在同一頁面上時選擇數據值。

繼從mainguys響應,並使用CSS來隱藏列而不是bVisible屬性,我現在可以得到我想要的;

var checkIds = []; 
    $('input[type="checkbox"]:checked', bodytable$.fnGetNodes()).each(function(i){ 
     var tr = $(this).closest('tr'); 
     checkIds.push($(tr).find('td:eq(0)').text()); 
    }); 
    alert(checkIds); 

回答

5

找到了一招如何做到這一點。

不要隱藏柱子,只需爲其分配一個類別display:none即可。

"aoColumns": [{ 
    "bVisible": true 
}, { 
    "bVisible": true, sClass:"hideme" 
}, { 
    "bVisible": true 
}] 

CSS:

.hideme { 
    display:none; 
} 

現在有了這個發現他們:

var checkIds = []; 
    bodytable$.$('tr').each(function(index,rowhtml){ 
     var checked= $('input[type="checkbox"]:checked',rowhtml).length; 
     if (checked==1){ 
     checkIds.push($('.hideme',rowhtml).text()); 
     } 
    }); 
    alert(checkIds); 

是的,我知道這是不是很優雅,但它的工作原理。 Try it here

+0

你先生是個天才!正如你所說,訣竅是用CCS而不是dataTable bVisible屬性來隱藏列。現在這留下了HTML中的列,我編輯了我的問題以提供我的最終解決方案。 – user497087

相關問題