jquery 数据表头在某些情况下不扩展或扩展缓慢,例如重新加载

Posted

技术标签:

【中文标题】jquery 数据表头在某些情况下不扩展或扩展缓慢,例如重新加载【英文标题】:jquery data table headers not expanding or expanding slow in some scenarios, like reloading 【发布时间】:2021-10-25 05:30:07 【问题描述】:

数据表在正文加载后加载标题,对用户可见。第一个身体加载,并在几秒钟内标题正在扩展。在某些情况下,重新加载时页眉不会展开。

这是预加载的数据表。在这里使用延迟加载。

 <div id="dataTableWrapper" style="display:none;">
   <table id="result"   class="table  cell-border" cellspacing="0" cellpadding="0" border="0"  >
      <thead>
         <tr>
            <td>1</td>
            <td>2</td>
            <td>3</td>
            <td>4</td>
            <td>5</td>
            <td>6</td>
            <td>7</td>
            <td>8</td>
            <td>9</td>
         </tr>
      </thead>
      <tbody id="searchResultsDiv">
         <c:forEach items="$list" var="info" varStatus="tIndex">
            <tr>
               <td >$tIndex.index + 1</td>
               <td >$info.typeDesc</td>
               <td >$info.time-</td>
               <td >$info.id</td>
               <td >$info.number</td>
               <td >$info.name</td>
               <td >$info.description</td>
               <td  >$info.boDescription</td>
               <td  >$info.userId</td>
            </tr>
         </c:forEach>
      </tbody>
   </table>
</div>                                                                            
 

这就是我初始化数据表的方式。

$(document).ready(function() 

    $('#result').DataTable(

        serverSide: true,

        processing: false,

        searching: false,

        lengthChange: false,

        loading: false,

        deferLoading: $("#totalRecordsCount").val(),

        order: [
            [1, "desc"]
        ],

        ajax: 

            type: "POST",

            contentType: "application/x-www-form-urlencoded; charset=windows-1256",

            url: $("#context").val() + "/Controller?actionParam=getResultForPagination",

            data: buildSearchData,

            dataSrc: function(json) 

                return json.data;

            

        ,

        //stateSave:false,

        scrollY: "735px",

        scrollCollapse: true,

        fixedHeader: true,

        paging: true,

        pageLength: $("#pageSize").val(),



        initComplete: function() 

            var api = this.api();

            $('#dataTableWrapper').show();

            api.columns.adjust();

        ,

        //single page? do not display pagination

        fnDrawCallback: function(oSettings) 

            if (oSettings._iDisplayLength > oSettings.fnRecordsDisplay()) 

                $(oSettings.nTableWrapper).find('.dataTables_paginate').hide();

                $(oSettings.nTableWrapper).find('.dataTables_info').hide();

             else 

                $(oSettings.nTableWrapper).find('.dataTables_paginate').show();

                $(oSettings.nTableWrapper).find('.dataTables_info').show();

            

        ,

        //processing :true,

        language: dataTable_lang_values

    );

)

这就是数据表在大多数情况下的显示方式,并且非常完美。

但有时当我们不断重新加载页面时,它会显示为这样。

【问题讨论】:

一个minimal reproducible example 会很完美 【参考方案1】:

在表完成设置后调用数据表 draw 和 adjust 函数将修复标题和任何其他未正确对齐的列

$('#result').DataTable(...); 
$('#result').DataTable().draw(); 
$('#result').DataTable().columns.adjust()

【讨论】:

对这个解决方案没有帮助。 @user630209 这就是我个人的做法 :) 尝试在小提琴中重现您的问题,我很乐意看看【参考方案2】:

例如,您的表 id = 结果

       $('#result').wrap("<div style='overflow-y: auto; clear:both;'></div>");

(注意:删除数据表中的滚动属性)

【讨论】:

需要滚动 通过添加此代码会自动滚动 ($('#result').wrap("" );)【参考方案3】:

我不完全确定,但是当您添加列选项并填写有关每列的一些详细信息时,DataTables 的效果要好得多。这样它就知道传入的数据是什么,以及如何将其与标题行相关联。我遇到了同样的问题,并且能够像这样在我的脚本中修复它:

                columns: [
                    
                        data: "ID",
                        visible: false,
                    ,
                    
                        data: "ITEM",
                        edit: true,
                        sort: true,
                    ,
                    
                        data: "DESC_1"
                    ,
                    
                        data: "UPC"
                    ,
                    
                        data: "Status",
                    ,
                ],

也许添加列变量也会对您有所帮助?

【讨论】:

【参考方案4】:

如果列的宽度始终相同,您可以使用简单的老式 html 来解决此问题,添加一个 colgroup 并像这样定义每个列的宽度:

<colgroup><col /><col />... </colgroup>

上面一行应该是下一行:

<table id="result" ... 

【讨论】:

和加有什么区别 不一样,因为它可以防止头痛。它覆盖了任何其他“宽度”定义,因此实现起来要容易得多。您还可以保留任何列宽,以便根据其单元格中包含的数据自动呈现。

以上是关于jquery 数据表头在某些情况下不扩展或扩展缓慢,例如重新加载的主要内容,如果未能解决你的问题,请参考以下文章

Django block.super 在特定情况下不起作用

在某些情况下不调用 UIGestureRecognizerState.Ended

WatchKit 扩展在 CocoaPods 下不起作用

扩展 jQuery UI 方法

PHP 扩展开发初探

为啥回顾中的有限重复在某些情况下不起作用?