Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript dataTables—如何使所有列在';draw.dt';_Javascript_Jquery_Datatables - Fatal编程技术网

Javascript dataTables—如何使所有列在';draw.dt';

Javascript dataTables—如何使所有列在';draw.dt';,javascript,jquery,datatables,Javascript,Jquery,Datatables,我有一个通过Ajax检索到dataTable中的数据集,它有一个时间延迟,这意味着用户可以在加载之前执行操作。我必须一次全部加载这个数据集,所以这次我不能使用服务器端处理将其分块提供 我正在使用dataTables按钮在其上下载xls,我将禁用该按钮,直到数据集到达,然后重新启用。如果我没有这样做,用户可以在ajax请求完成之前下载一个空的电子表格。因此,对于按钮,我将其编码如下: buttons: [ { extend: 'excel',

我有一个通过Ajax检索到dataTable中的数据集,它有一个时间延迟,这意味着用户可以在加载之前执行操作。我必须一次全部加载这个数据集,所以这次我不能使用服务器端处理将其分块提供

我正在使用dataTables按钮在其上下载xls,我将禁用该按钮,直到数据集到达,然后重新启用。如果我没有这样做,用户可以在ajax请求完成之前下载一个空的电子表格。因此,对于按钮,我将其编码如下:

buttons: [
        {
            extend: 'excel',
            text: '<i class="fa fa-file-excel-o"></i>',
            titleAttr: 'Download to Excel',
            enabled: false
        },
    ],
columns: [
        {
            data: 'myData', 
            orderable: false, // all columns are set to false like this
        },
我需要对可订购列执行同样的操作,因为如果在加载数据之前单击了可订购列,则显示的消息将从“加载”更改为“表中没有可用数据”(可以理解),但这不是一种很好的用户体验

我将每个列设置为
orderable:false
,如下所示:

buttons: [
        {
            extend: 'excel',
            text: '<i class="fa fa-file-excel-o"></i>',
            titleAttr: 'Download to Excel',
            enabled: false
        },
    ],
columns: [
        {
            data: 'myData', 
            orderable: false, // all columns are set to false like this
        },
这是可行的,它设置了所有列,因此无法对它们进行排序。我不能做的是在数据加载后使它们都可以订购

我所希望的可能是这样的,但我所尝试的一切都不会奏效:

table.on( 'draw.dt', function () {
    table.columns().orderable().enable();
});
有什么想法吗?如果我必须单独启用每一列,那么也没关系,我也找不到一种方法


提前感谢。

在初始化期间设置
orderable:false的原因,随后使用
table.columns().orderable().enable()对其进行更改orderable:false
是一个初始化选项,则code>将不起作用。由于DataTables的工作方式,初始化完成后,无法更改初始化选项。这意味着您需要找到其他方法在加载数据时禁用排序

就我个人而言,如果这只是初始加载,我将使用
style=“display:none;”“
隐藏该表,直到可以调用initComplete回调,然后只调用
$(…).show()。如果不想只隐藏整个表,可以有选择地隐藏标题(可能是
$(“#table thead”).hide();
),并在加载后显示它们

对于我正在开发的站点,我们有一个类似的情况,即一次加载大约50k行。在执行ajax调用时,我常常在表上放置一个自定义弹出窗口拦截器。我认为这个解决方案有最好的UI体验。您可以使用
$.blockUI()
在表上选择性地应用阻塞模式,并使用自定义加载消息