。 我是 jquery 数据表的新手,面临分页问题。当我插入一个新元组时,就会在表中创建一个额外的页面。
例如:假设我插入了 1 条记录,它最初在底部显示 1 页,现在如果我插入第二条记录,则会创建其他页面。我该如何解决这个问题
<script type="text/javascript" charset="utf-8">
$(document).ready(function(){
$('#datatables').dataTable({
"sPaginationType":"full_numbers",
"aaSorting":[[2, "desc"]],
"bJQueryUI":true
});
})
</script>
先生和我有这样的 table
<?php foreach($response->products as $row): ?>
<tr>
<td><?=$row->id;?></td>
<td><?=$row->name;?></td>
<td><?=$row->amount;?></td>
<td><?=$row->type;?></td>
<td><?=$row->description;?></td>
<td><?=anchor('product/update/'.$row->id.'/','Edit');?></td>
<td><?=anchor('product/delete/'.$row->id.'/','Delete');?></td>
</tr>
<?php endforeach; ?>
所以,每次发生 for 循环时,我都会得到一个额外的页面...所以我会得到 10 条记录的 10 页,尽管它们显示在一页中
最佳答案
当需要向 DataTable 添加行(无论是通过动态创建的 HTML 或 Ajax 推送)时,我发现一个特别有用的插件是来自 DataTables 网站的 fnAddTr 插件。你可以在他们的API plugins page上找到它
这是适合您的代码:
$.fn.dataTableExt.oApi.fnAddTr = function ( oSettings, nTr, bRedraw ) {
if ( typeof bRedraw == 'undefined' )
{
bRedraw = true;
}
var nTds = nTr.getElementsByTagName('td');
if ( nTds.length != oSettings.aoColumns.length )
{
alert( 'Warning: not adding new TR - columns and TD elements must match' );
return;
}
var aData = [];
for ( var i=0 ; i < nTds.length ; i++ )
{
aData.push( nTds[i].innerHTML );
}
/* Add the data and then replace DataTable's generated TR with ours */
var iIndex = this.oApi._fnAddData( oSettings, aData );
nTr._DT_RowIndex = iIndex;
oSettings.aoData[ iIndex ].nTr = nTr;
oSettings.aiDisplay = oSettings.aiDisplayMaster.slice();
if ( bRedraw )
{
this.oApi._fnReDraw( oSettings );
}
};
}(jQuery));
像这样使用它:
var oRecords = $(".data-table").dataTable({ ... DataTables Initialization ... });
... code ...
var myTr = $("<tr><td>Field1</td><td>Field2</td></tr>")[0]; // This tr can come from anywhere, but it's very important that you either get the true DOM node by getting index zero, or by chaining .get();
oRecords.fnAddTr(myTr);
该插件负责添加行、重绘表格和更新分页!
关于php - 插入新记录后数据表中出现不需要的分页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16968254/