在表完全加载jQuery之后,检查数据表是否为空

Check if datatables is empty after table is fully loaded jQuery

本文关键字:数据表 检查 是否 之后 加载 jQuery      更新时间:2023-09-26

在对这个问题进行了一些研究并试图找到解决方案(不幸的是,没有成功)后,我决定最好发布我的问题。我目前在视图中有一个包含资产信息的Datatable,我试图阻止用户继续更改选择字段上的选项,直到将资产添加到资产表中。

下面列出的是document.ready函数下.js文件中的资产数据表代码

assets = $('#assets').dataTable({
    sAjaxSource: "http://" + window.location.hostname + "/request/get-request-assets/?id=" + $('#id').val(),
    fnDrawCallback: function (oSettings) {
        setIncompleteTD();
        enableRequestStatus();
    },
    scrollY: '185px',
    scrollCollapse: true,
    paging: false,
    aaSorting: [[1, 'asc']],
    bPaginate: false,
    bFilter: false,
    bLengthChange: false,
    bAutoWidth: false,
    bInfo: false,
    aoColumns: [
        {sWidth: '35px', bSortable: false},
        {sWidth: '40px'},
        {},
        {},
        {},
        {},
        {},
        {sWidth: '80px'}
    ],
    language: {
        sLoadingRecords: '',
        sEmptyTable: 'This request has no asset records.',
        sInfoEmpty: ''
    }

我发现table.fnSettings().aoData.length===0可以用来检查表是否为空。然而,在遍历代码(通过Chrome调试器)之后,Datatables(至少在我的情况下)似乎在表完全生成之前调用了函数。。。

我在下面有这个代码

assetPresent = (assets.fnSettings().aoData.length===0) ? false : true;
console.log(assetPresent);

在我的document.ready函数中,在$('#assets').dataTable()函数之后(如果这很重要的话)AssetPresent将用作切换状态选择框的标志。不幸的是,在我能够利用它之前。。。

console.log(assetPresent);

似乎总是设置为false,即使表中有明确的记录,并且。。。

assetPresent = (assets.fnSettings().aoData.length===0) ? false : true;

倾向于被忽略。。。

我很想知道table.fnSettings().aoData.length==0是否不是最好的选择。提前谢谢。

你试过table.data().length吗?

你可以试试这个

var table = $('#assets').DataTable();
if ( ! table.data().any() ) {
   alert( 'Empty table' );
}