jQuery DataTable - “处理”不会出现

时间:2018-05-05 05:27:04

标签: javascript jquery datatables

我在jQuery数据表中显示处理消息时遇到问题。我四处寻找这个问题并遵循所有建议无济于事。只有一个建议有效,但部分建议。

我试过了:

var tblFacCert = $("#tblFacCert").on('processing.dt', function (e, settings, processing) {
    if (processing) {
        if ($('#imgLoad').length == 0)
            $(this).prepend('<img id="imgLoad" src="../assets/images/PleaseWait.gif" alt="" />');
    }
    else
        $('#imgLoad').remove();
}).DataTable({
    dom: 'lfrtip',
    processing: true,
    ....
}),

此外:

<style type="text/css">
    #tblFacCert_processing {
        top: 64px !important;
        z-index: 11000 !important;
        visibility:visible;
        background-image:url("../assets/images/PleaseWait.gif"); background-repeat:no-repeat;
    }
</style>

这部分有效。它显示“Processing ...”一词,但在填充表格时不会消失。此外,它显示在页面回发上,就像在下拉列表中进行选择一样,大概是因为我在回发时重新绘制。

"preDrawCallback": function () {
    $('.dataTables_processing').attr('style', padding-bottom: 60px; display: block; z-index: 10000 !important');
},

更新 - 添加serverSide后:true

我最初在数据表定义中添加了“serverSide:true”,但在收到此错误后将其删除:“{36}中第36行第442行未处理的异常 0x800a138f - JavaScript运行时错误:无法设置未定义或空引用的属性“数据”。

我在页面上有两个数据表,当点击“提交”按钮时,它们会被填充。这就是我设置和填充它们的方式(我只是为了简洁而包含一个数据表)

var tblFacCert = $("#tblFacCert").DataTable({
    jQueryUI: true,
    "serverSide": true, // This causes error
    data: [],
    dom: 'lfrtip',
    processing: true,
    stateSave: true,
    "lengthMenu": [[15, 25, 50, -1], [15, 25, 50, "All"]],
    order: [[0, "asc"], [1, "asc"], [2, "asc"], [3, "asc"]],

    "columns": [
        {
            "data": "Area"
        }, {
            "data": "District"
        }, { ... more columns ...}
    ],
    "columnDefs": [ ...
    ],
    "pageLength": 15,
    deferRender: true,
    scrollCollapse: true,
    scroller: true,
    "preDrawCallback": function () {
        $('#tblFacCert_processing').attr('style', 'padding-bottom: 60px; display: block; z-index: 10000 !important');
    },
    "rowCallback": function (row, data, index) {
        ...
    }
});

// Get data for both data tables and populate
$("#btnSubmit").on("click", function (event) {
    var facCertUrl = "../services/easg.asmx/GetComplianceReportData";
    var facCertParams = "{ 'startDate': '" + $("#tbStartDate").val() + "', 'certID': '" + $('#ddlCertificate').val() + "'}";
    var statsUrl = "../services/easg.asmx/GetFacComplianceByArea";
    var statsParams = "{ 'startDate': '" + $("#tbStartDate").val() + "', 'certID': '" + $('#ddlCertificate').val() + "'}";
    populteTable(statsUrl, statsParams, tblStats);
    populteTable(facCertUrl, facCertParams, tblFacCert);
})

function populteTable(ws_url, parameters, table) {
    $.ajax({
        type: "POST",
        dataType: "json",
        contentType: "application/json; charset=utf-8",
        url: ws_url,
        cache: false,
        data: parameters,
    }).done(function (result) {
        table.clear().draw();
        table.processing = true;
        jResult = JSON.parse(result.d);
        table.rows.add(jResult).draw();
    }).fail(function (jqXHR, textStatus, errorThrown) {
        alert(textStatus + ' - ' + errorThrown);
    });
}

1 个答案:

答案 0 :(得分:0)

只有在启用了服务器端处理的情况下才会显示处理消息。在示例here中,您会看到它只是短暂地弹出,但只是短暂地,因为数据集很小,处理时间很短。

const hours = ["09:00", "10:00", "11:00", "12:00", "13:00", "14:00"];

const hours2 = ["11:00", "12:00"];

const renderedHours = hours.map(item => {
  const styles = {
    backgroundColor: hours2.some(h => h === item) ? "yellow" : "pink"
  }

  return (
    <li
      style={styles}
      key={item}
      className="hoursListItem"
      onClick={e => {
        this.handleClick(e);
      }}
    >
      {item}
    </li>
  );
});

如果这不能解决它,并且它不显示处理消息,则值得粘贴整个表初始化代码。