引导选项卡中的数据表大小不正确

Posted

技术标签:

【中文标题】引导选项卡中的数据表大小不正确【英文标题】:Datatables improperly sized in bootstrap tab 【发布时间】:2016-07-16 08:33:08 【问题描述】:

我有一个页面,其中包含三个引导选项卡和每个选项卡中的数据表。第一个选项卡中的数据表工作正常。但是,第二个选项卡中的数据表是半角的,我不知道为什么。也没有应用 css。

这是第一个选项卡的屏幕截图(工作正常)

还有第二个选项卡(半角数据表)

我的代码:

$('#companies').DataTable( //table in tab 1 (works fine)
        responsive: true
);


$('#companies2').DataTable( //table in tab 2
        responsive: true
);

我的html

<!-- tab start -->
<div class="container">
    <div class="row">
        <div class="col-md-12">
            <h1>Tabs</h1>
            <ul class="nav nav-tabs">
                <li class="active"><a href="#tab1" data-toggle="tab">Section 1</a></li>
                <li><a href="#tab2" data-toggle="tab">Section 2</a></li>
                <li><a href="#tab3" data-toggle="tab">Section 3</a></li>
            </ul>

            <!-- tab sections -->
            <div class="tab-content">
                <div class="tab-pane active" id="tab1">
                    <table id="companies" class="table table-striped table-bordered dt-responsive nowrap" cellspacing="0">
                        <thead>
                            <tr>
                                <th>Company ID</th>
                                <th>Company Name</th>
                                <th>Status</th>
                                <th></th>
                                <th></th>
                            </tr>
                        </thead>
                        <tbody>
                            #each context
                            #if setup
                            <tr>
                                <td>company_id</td>
                                <td>company_name</td>
                                #if is_approved
                                <td>Approved</td>
                                else
                                <td>Not Approved</td>
                                /if
                                <td><a href="/admin/viewclientorders/company_id">View Orders</a></td>
                                <td><a href="/admin/company/company_id">View Details</a></td>
                            </tr>
                            /if
                            /each
                        </tbody>
                    </table> 
                </div>
                <div class="tab-pane" id="tab2">
                    <table id="companies2" class="table table-striped table-bordered dt-responsive nowrap" cellspacing="0">
                        <thead>
                            <tr>
                                <th>Company ID</th>
                                <th>Company Name</th>
                                <th>Create Date</th>
                                <th></th>
                                <th></th>
                            </tr>
                        </thead>
                        <tbody>
                            #each context
                            #unless setup
                            <tr>
                                <td>company_id</td>
                                <td>company_name</td>
                                <td>created_at</td>
                                <td><button class="btn btn-primary setup"><a href="/admin/companies/setup_company/company_id">Setup</a></button></td>
                                <td><button class="btn btn-danger delete">Ignore</button></td>
                            </tr>
                            /unless
                            /each
                        </tbody>
                    </table>
                </div>
                <div class="tab-pane" id="tab3">
                    3rd
                </div>

            </div>

有人可以帮忙吗?

【问题讨论】:

您似乎在底部遗漏了三个结束标签。我假设这是一个复制/粘贴错误。除此之外,您的标记看起来不错,您可以制作一个 JsFiddle 或链接到一个实时示例吗?问题可能在于它如何与代码的其他部分交互。 【参考方案1】:

保留dataTable实例,即

var companies2 = $('#companies2').DataTable(
  responsive: true
)

然后使用columns.adjust() 重新计算当持有表格的选项卡变得可见时的宽度:

$('a[data-toggle="tab"]').on('shown.bs.tab', function(e) 
  if (e.target.hash == '#tab2') 
    companies2.columns.adjust().draw()
  
)

完全未经您的特定场景测试,但这肯定是要走的路。

【讨论】:

【参考方案2】:

我找到了一个非常简单的解决方案:添加“style:100%”

<table style="width: 100% !important" id="my-table" datatable="ng" dt-options="dtOptions" class="table table-striped table-bordered table-hover dataTables-example">

【讨论】:

【参考方案3】:

解决方案

当表格可见时,使用columns.adjust()responsive.recalc() 重新计算列宽。

$('a[data-toggle="tab"]').on('shown.bs.tab', function(e)
    $($.fn.dataTable.tables(true)).DataTable()
        .columns.adjust()
        .responsive.recalc();
); 

演示

https://jsfiddle.net/gyrocode/Ltga3n4u/

链接

有关 jQuery DataTables 和 Bootstrap Tabs 最常见问题的解决方案,请参阅 jQuery DataTables – Column width issues with Bootstrap tabs。

【讨论】:

【参考方案4】:

简单的修复!使用 autoWidth: false

$('#companies').DataTable( 
    responsive: true,
    autoWidth: false

);


$('#companies2').DataTable( 
    responsive: true,
    autoWidth: false

);

【讨论】:

【参考方案5】:

在为 DataTables 使用响应式插件时,您还应该调用 responsive.recalc(),另外:

$(document).on('shown.bs.tab', 'a[data-toggle="tab"]', function (e) 
    $.fn.dataTable.tables( visible: true, api: true )
        .columns.adjust()
        .responsive.recalc()
        .draw();
);

这是一个老问题,但也许有人会帮助提供这些额外信息。

【讨论】:

以上是关于引导选项卡中的数据表大小不正确的主要内容,如果未能解决你的问题,请参考以下文章

rails timelinejs 未在引导选项卡中正确加载

在引导选项卡中选择 2 挤压下拉列表

Rails 引导选项卡。选项卡中的 Dropzone 不起作用

Select2 在引导选项卡中不起作用

laravel - 在正确的选项卡中显示验证错误

未激活的引导选项卡中的 Google-Maps-for-Rails