事件
在 DataTables 或其扩展之一执行特定操作(如页面绘制)时,通常会发现知道具体操作时间非常有用,以便可以更新其他依赖元素来考虑到更改。为了提供这一功能,DataTables 会触发定制的 DOM 事件,可以侦听这些事件,然后使用 on()
方法或 jQuery 的 on()
方法进行操作。DataTables 的定制事件的运作方式与标准 DOM 事件完全相同,并且允许事件驱动的操作,这对于插件特别有用。
有关 DataTables 及其扩展将触发的事件的完整列表,请参阅 事件参考文档。
侦听事件
如上所述,您可以使用 on()
或 jQuery 的 on()
方法侦听事件。on()
的工作方式与 $().on()
完全相同,它支持名称空间和多个事件。
请注意,所有 DataTables 事件都将触发 dt
名称空间。事件的这种名称空间划分是为了防止与其他 JavaScript 库触发的定制事件发生冲突。因此,您应该将 .dt
追加到您要侦听的事件名称(使用 on()
时,如果需要,名称空间将自动追加)。由于 jQuery 中名称空间的工作方式,如果您希望使用名称空间,则可以使用 dt
名称空间和您自己的定制名称空间。
例如,要侦听 DataTables 中的绘制事件
var table = $('#example').DataTable();
table.on( 'draw', function () {
alert( 'Table redrawn' );
} );
还可以写成这样
$('#example').on( 'draw.dt', function () {
alert( 'Table redraw' );
} );
请注意,使用 jQuery 的 on()
方法时使用了 dt
名称空间,而 on()
方法会自动为您追加名称空间。
删除事件
与 $().on()
一样,DataTables 事件可以用 off()
和 $().off()
进行删除。必须从不再存在的对象(在它们被销毁之前)中删除事件,以便 JavaScript 引擎的垃圾回收器释放为事件和连接到事件的对象分配的内存。
此外,可通过 one()
或 $().one()
监听单一事件,这样可以在首次触发事件后立即删除事件处理程序。
冒泡
与典型的 DOM 事件一样,DataTables 自定义事件会通过文档冒泡,因此,您可以使用 $().on()
的委托窗体来监听事件,或在 DOM 树中更高的其他元素上监听事件。
例如,若要了解何时创建了新的 DataTable,这会很有用,可使用 init
事件来监听,如下所示:
$(document).on( 'init.dt', function ( e, settings ) {
var api = new $.fn.dataTable.Api( settings );
console.log( 'New DataTable created:', api.table().node() );
} );
同样,此方法还可以与 xhr
事件一起使用,这会让您了解从上次 DataTables 发起的 Ajax 查询返回了哪些 JSON 数据。
事件参考文档 中提供了 DataTables 及其扩展可触发的事件的完整列表。