如果数据表中只有一个页面,则禁用分页
我正在实施数据库,根据我的要求,除了分页问题外,大部分的事情都已经解决了。 在我的情况下,每次分页导航显示。 如果只有一个页面,我想禁用分页导航。怎么做? 我的代码是这样的:
JS
<script> function fnFilterColumn(i) { $('#example').dataTable().fnFilter( $("#col" + (i + 1) + "_filter").val(), i ); } $(document).ready(function() { $('#example').dataTable({ "bProcessing": true, "sAjaxSource": "datatable-interestdb.php", "bJQueryUI": true, "sPaginationType": "full_numbers", "sDom": 'T<"clear">lfrtip', "oTableTools": { "aButtons": [ { "sExtends": "csv", "sButtonText": "Save to CSV" } ] }, "oLanguage": { "sSearch": "Search all columns:" } }); $("#example").dataTable().columnFilter({ aoColumns: [ null, null, null, null ] }); $("#col1_filter").keyup(function() { fnFilterColumn(0); }); }); </script>
HTML
<table cellpadding="3" cellspacing="0" border="0" class="display userTable" aria-describedby="example_info"> <tbody> <tr id="filter_col1"> <td>Interest:</td> <td> <input type="text" name="col1_filter" id="col1_filter"> </td> </tr> </tbody> </table> <table width="100%" border="0" align="center" cellpadding="2" cellspacing="1" class="form_table display" id="example"> <thead> <tr> <th class="sorting_asc" width="25%">Interest</th> <th width="25%">Name</th> <th width="25%">Email</th> <th width="25%">Contact No</th> </tr> </thead> <tbody> <tr> <td colspan="4" class="dataTables_empty">Loading data from server</td> </tr> </tbody> <tfoot> <tr> <th></th> <th></th> <th></th> <th></th> </tr> </tfoot> </table>
你必须dynamic地隐藏它们我想,你可以使用fnDrawCallback()
$('#example').dataTable({ "fnDrawCallback": function(oSettings) { if ($('#example tr').length < 11) { $('.dataTables_paginate').hide(); } } });
编辑 – 在这里find的另一种方式可能是
"fnDrawCallback":function(){ if ( $('#example_paginate span span.paginate_button').size()) { $('#example_paginate')[0].style.display = "block"; } else { $('#example_paginate')[0].style.display = "none"; } }
基于Nicola的回答,您可以使用fnDrawCallback()callback函数和oSettings对象在绘制完成后隐藏表格分页。 使用oSettings,你不需要知道任何有关表设置(每页logging,特定于表的select器等)
以下内容将检查每页显示长度是否大于总logging,并且如果是,则隐藏分页:
$('#your_table_selector').dataTable({ "fnDrawCallback": function(oSettings) { if (oSettings._iDisplayLength > oSettings.fnRecordsDisplay()) { $(oSettings.nTableWrapper).find('.dataTables_paginate').hide(); } } });
文档
- fnDrawCallback()
- oSettings
查看我的function插件conditionalPaging 。
用法:
$('#myTable').DataTable({ conditionalPaging: true }); or $('#myTable').DataTable({ conditionalPaging: { style: 'fade', speed: 500 // optional } });
在使用V1.10 + JQuery Datatables时,这是正确的方法。 该过程通常与以前的版本相同,但事件名称和API方法略有不同:
$(table_selector).dataTable({ preDrawCallback: function (settings) { var api = new $.fn.dataTable.Api(settings); var pagination = $(this) .closest('.dataTables_wrapper') .find('.dataTables_paginate'); pagination.toggle(api.page.info().pages > 1); } });
文档
使用上面的@sinabuild议,包括@GuiSim提到的修复 。
将此代码添加到您的数据表初始化请求。
JQUERY
"fnDrawCallback": function (oSettings) { var pgr = $(oSettings.nTableWrapper).find('.dataTables_paginate') if (oSettings._iDisplayLength > oSettings.fnRecordsDisplay()) { pgr.hide(); } else { pgr.show() } }
还是更好还是replace
"fnDrawCallback": null
在你的datatables.js中应用广泛的代码。
我更喜欢@新浪的解决scheme。 做得好。
但我的一个有一些必要的改进。 @sina忘记了else
部分,如果有必要再次显示分页。 我添加了可能性来定义lengthMenu
的all
选项,如下所示:
jQuery('#your_table_selector').dataTable({ "lengthMenu": [[10, 25, 50, 100, 250, 500, -1], [10, 25, 50, 100, 250, 500, "All"]], "fnDrawCallback": function(oSettings) { if (oSettings._iDisplayLength == -1 || oSettings._iDisplayLength > oSettings.fnRecordsDisplay()) { jQuery(oSettings.nTableWrapper).find('.dataTables_paginate').hide(); } else { jQuery(oSettings.nTableWrapper).find('.dataTables_paginate').show(); } } });
这不是直接可能的,因为DataTables不支持启用和禁用function的运行时间。 然而,你可以做的是利用fnDrawCallback()函数来检查是否只有一个页面,如果是这样,隐藏分页控件。
这个callback函数可以和任何数据表一般工作,而不必硬编码表ID:
$('.data-table').dataTable({ fnDrawCallback: function(oSettings) { if(oSettings.aoData.length <= oSettings._iDisplayLength){ $(oSettings.nTableWrapper).find('.dataTables_paginate').hide(); } } });
如果你的数据不是dynamic的,也就是说,服务器生成的HTML表格,然后由DataTables增强,你可以在服务器上呈现分页选项(我使用的是razor)。
$("#results").dataTable({ paging: @(Model.ResultCount > Model.PageSize ? "true" : "false"), // more ... });
只需将以下内容添加到您的样式表中:
.dataTables_paginate .paginate_button.disabled { display: none; }
我知道这是一个旧的职位,但对于我们这些将使用这个,并有像我一样的强迫症,需要改变。
更改if语句,
if (oSettings._iDisplayLength > oSettings.fnRecordsDisplay())
至
if (oSettings._iDisplayLength >= oSettings.fnRecordsDisplay())
有了这个小改动,你将看到分页button的logging长度大于10,25,50,100,而不是分页button只有10条logging,技术上10,25等logging仍然是一个页面视图。
你也可以按照这个方式。
"fnDrawCallback":function(){ if(jQuery('table#table_id td').hasClass('dataTables_empty')){ jQuery('div.dataTables_paginate.paging_full_numbers').hide(); } else { jQuery('div.dataTables_paginate.paging_full_numbers').show(); } }
这对我有效。
我试图使sPaginationType作为dynamic数据表中的每个条目,但我找不到适当的解决scheme,但我做的是
"fnDrawCallback": function(oSettings) { $('select[name="usertable_length"]').on('change', function(e) { var valueSelected = this.value; if ( valueSelected < 10 ) { $('.dataTables_paginate').hide(); } else { $('.dataTables_paginate').show(); } }); },
$('#dataTable_ListeUser').DataTable( { //usual pager parameters// "drawCallback": function ( settings ) { /*show pager if only necessary console.log(this.fnSettings());*/ if (Math.ceil((this.fnSettings().fnRecordsDisplay()) / this.fnSettings()._iDisplayLength) > 1) { $('#dataTable_ListeUser_paginate').css("display", "block"); } else { $('#dataTable_ListeUser_paginate').css("display", "none"); } } });
jQuery – 我试着用下面的选项,它为我工作
$("#your_tbl_selector").dataTable({ "pageLength": 3, "autoWidth": false, "fixedHeader": {"header": false, "footer": false}, "columnDefs": [{ "width": "100%", "targets": 0 }], "bPaginate": true, "bLengthChange": false, "bFilter": true, "bInfo": false, "bAutoWidth": false, "oLanguage": { "oPaginate": { "sNext": "", "sPrevious": "" } }, "fnDrawCallback": function(oSettings) { if (oSettings._iDisplayLength >= oSettings.fnRecordsDisplay()) { $(oSettings.nTableWrapper).find('.dataTables_paginate').hide(); } } });
数据表输出视图
这是我的解决scheme,如果在同一页面上有多个表格,它也可以工作。 它防止例如(表A必须有分页,B不能)。
tableId在我的代码永远不会定义。 如果你没有为你的表定义一个ID,dataTable会为你添加类似'DataTables_Table_0'
fnDrawCallback: function (oSettings) { if ($(this).DataTable().column(0).data().length <= oSettings._iDisplayLength) { var tableId = $(this).attr('id'); $('#' + tableId + '_paginate').hide(); } }
我已经使用这个代码:
.dataTables_paginate .disabled { display:none; } dataTables_paginate .disabled + span { display:none; }
哪个解决了我的问题:)希望它有帮助
- 在C#中embeddedIronPython的问题(缺less编译器所需的成员“Microsoft.CSharp.RuntimeBinder.Binder.InvokeMember”
- 不能将int转换为bool