我正在渲染 Jquery DataTables 表中的数据图,并希望触发一个函数,以便在 UI 搜索的表内容发生变化时重新绘制图形或调用如下所示的搜索
$('#mytable').DataTable().column(0).search('my value').draw()
在我的桌子上,我有以下代码
var table = $('#mytable').DataTable({
//my settings here
}).on( 'search.dt', function () { updateGraph( GraphData ) ; } );
代码正常工作,但在排序事件(例如对列进行排序(上,触发搜索后跟订单事件。有没有办法仅在表内容更改时触发更改?
有关详细信息,请参阅此示例。 https://datatables.net/examples/advanced_init/dt_events.html
这是一个很好的收获!从未意识到即使在简单的排序中也会触发search.dt
事件。实际上是一个特殊的问题。也许其他人会想出更好的主意,但我认为保留当前行的"快照"并在触发search.dt
时将它们与行进行比较可以解决问题。如果snapshot
基于表行的默认顺序,或index
,而不是基于应用的排序,那么我们可以触发datachange.dt
事件当且仅当数据在 dataTable 中实际更改时:
var table = $('#example').DataTable({
snapshot: null
})
.on('search.dt', function() {
var snapshot = table
.rows({ search: 'applied', order: 'index'})
.data()
.toArray()
.toString();
var currentSnapshot = table.settings().init().snapshot;
if (currentSnapshot != snapshot) {
table.settings().init().snapshot = snapshot;
if (currentSnapshot != null) $('#example').trigger('datachange.dt')
}
})
.on('datachange.dt', function() {
alert('data has changed')
//updateGraph( GraphData )
})
演示 ->http://jsfiddle.net/hftuew5u/