我正在实施datatbales并根据我的要求,除分页问题外,大多数事情已经解决。在我的情况下,每次分页导航显示。如果只有一个页面,我想禁用分页导航。怎么做?我的代码就像:
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>
答案 0 :(得分:72)
根据Nicola的答案,您可以使用fnDrawCallback()回调和oSettings对象在绘制后隐藏表格分页。使用oSettings,您无需了解表设置(每页记录,特定于表的选择器等)。
以下检查以查看每页显示长度是否大于总记录数,如果是,则隐藏分页:
$('#your_table_selector').dataTable({
"fnDrawCallback": function(oSettings) {
if (oSettings._iDisplayLength > oSettings.fnRecordsDisplay()) {
$(oSettings.nTableWrapper).find('.dataTables_paginate').hide();
}
}
});
文档
答案 1 :(得分:36)
您必须动态隐藏它们我认为您可以使用fnDrawCallback()
$('#example').dataTable({
"fnDrawCallback": function(oSettings) {
if ($('#example tr').length < 11) {
$('.dataTables_paginate').hide();
}
}
});
编辑 - 发现here的另一种方式可能是
"fnDrawCallback":function(){
if ( $('#example_paginate span span.paginate_button').size()) {
$('#example_paginate')[0].style.display = "block";
} else {
$('#example_paginate')[0].style.display = "none";
}
}
答案 2 :(得分:30)
查看我的功能插件conditionalPaging。
用法:
$('#myTable').DataTable({
conditionalPaging: true
});
or
$('#myTable').DataTable({
conditionalPaging: {
style: 'fade',
speed: 500 // optional
}
});
答案 3 :(得分:19)
在使用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);
}
});
答案 4 :(得分:4)
使用 @sina 建议,包括 @GuiSim 提及的修复。
将此代码添加到您的数据表初始化请求中。
<强> JQUERY 强>
"fnDrawCallback": function (oSettings) {
var pgr = $(oSettings.nTableWrapper).find('.dataTables_paginate')
if (oSettings._iDisplayLength > oSettings.fnRecordsDisplay()) {
pgr.hide();
} else {
pgr.show()
}
}
或者更好的还是替换
"fnDrawCallback": null
在你的datatables.js中应用代码网站。
答案 5 :(得分:3)
我更喜欢@sina的解决方案。干得好。
但是我的一些有必要的改进。
如果需要,@ sina忘记了else
部分再次显示分页。我添加了在all
中定义lengthMenu
选项的可能性,如下所示:
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();
}
}
});
答案 6 :(得分:2)
<强>的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();
}
}
});
答案 7 :(得分:2)
此回调函数通常适用于任何数据表,而无需对表ID进行硬编码:
$('.data-table').dataTable({
fnDrawCallback: function(oSettings) {
if(oSettings.aoData.length <= oSettings._iDisplayLength){
$(oSettings.nTableWrapper).find('.dataTables_paginate').hide();
}
}
});
答案 8 :(得分:2)
为了达到这个目标,我正在做以下工作,因为上面没有提到它是一种更动态的解决方案。首先,它获取页面总数,然后决定显示/隐藏分页。 仅当用户更改页面长度时,此代码才有意义。
jQuery('#example').DataTable({
fnDrawCallback: function(oSettings) {
var totalPages = this.api().page.info().pages;
if(totalPages == 1){
jQuery('.dataTables_paginate').hide();
}
else {
jQuery('.dataTables_paginate').show();
}
}
});
答案 9 :(得分:1)
只需将以下内容添加到样式表中即可:
.dataTables_paginate .paginate_button.disabled {
display: none;
}
答案 10 :(得分:1)
我试图在每个条目的数据表中将sPaginationType设置为Dynamic,但我找不到合适的解决方案,但我所做的是
"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();
}
});
},
答案 11 :(得分:1)
$('#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");
}
}
});
答案 12 :(得分:0)
我知道这是一个老帖子,但对于我们这些将使用它的人,并且像我一样有强迫症,需要改变。
更改if语句
if (oSettings._iDisplayLength > oSettings.fnRecordsDisplay())
到
if (oSettings._iDisplayLength >= oSettings.fnRecordsDisplay())
通过这个小改动,您将看到记录长度大于10,25,50,100的分页按钮,而不是仅显示10个记录的分页按钮,技术上10,25等记录仍然是单页视图。
答案 13 :(得分:0)
如果您的数据不是动态的,即服务器生成HTML表,然后由DataTables增强,您可以在服务器上呈现分页选项(我使用的是razor)。
$("#results").dataTable({
paging: @(Model.ResultCount > Model.PageSize ? "true" : "false"),
// more ...
});
答案 14 :(得分:0)
这不是直接可行的,因为DataTables不支持启用和禁用功能是运行时。但是,你可以做的是使用fnDrawCallback()函数检查是否只有一个页面,如果是,则隐藏分页控件。
答案 15 :(得分:0)
这是我的解决方案,如果您在同一页面上有多个表,它也可以使用。例如,它可以防止崩溃(表A必须有分页,B不能)。
我的代码中的tableId永远不会被定义。如果您还没有为表格定义ID,则dataTable会通过添加类似&#39; DataTables_Table_0&#39;
之类的内容为您执行此操作 fnDrawCallback: function (oSettings) {
if ($(this).DataTable().column(0).data().length <= oSettings._iDisplayLength) {
var tableId = $(this).attr('id');
$('#' + tableId + '_paginate').hide();
}
}
答案 16 :(得分:0)
这解决了我的问题:
UseUrls
希望它能帮助你们所有人
答案 17 :(得分:0)
$("#datatable").DataTable({
"fnDrawCallback": function (oSettings) {
if ($(oSettings.nTBody).find("tr").length < $(oSettings.nTableWrapper).find("select[name=fileList_length]").val()) {
$(oSettings.nTableWrapper).children(".dataTables_paginate").hide();
}
}
});