事件

在 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 及其扩展可触发的事件的完整列表。