数据表通过编程方式选择行而不会触发选择事件

时间:2018-08-13 22:33:48

标签: javascript datatables

在Datatable的Select插件中,有一种方法可以以编程方式选择行:

https://datatables.net/reference/api/row().select()

但这也会触发行的select事件,这在我的上下文中并不理想,因为它将进入无限循环...

有没有一种方法而不必使用某些控制变量?

其API中用于选择功能的位如下:

apiRegisterPlural( 'rows().select()', 'row().select()', function ( select ) {
    var api = this;

    if ( select === false ) {
        return this.deselect();
    }

    this.iterator( 'row', function ( ctx, idx ) {
        clear( ctx );

        ctx.aoData[ idx ]._select_selected = true;
        $( ctx.aoData[ idx ].nTr ).addClass( ctx._select.className );
    } );

    this.iterator( 'table', function ( ctx, i ) {
        eventTrigger( api, 'select', [ 'row', api[i] ], true );
    } );

    return this;
} );

似乎我只需要弄清楚ctx.aoData[ idx ]._select_selected = true;部分,ctx是行对象吗?我一无所知。

1 个答案:

答案 0 :(得分:0)

我知道这个问题很老了,但对于那些后来来到这里的人来说可能需要一个答案。

Datatables 有一个选择事件和一个用户选择事件。

只需在适用的情况下使用用户选择事件,而将选择事件留作所有其他用途。 https://datatables.net/reference/event/user-select

例如

var table = $('#example').DataTable( {
    select: true
} );
 
table
    .on( 'user-select', function ( e, dt, type, cell, originalEvent ) {
        if ( originalEvent.target.nodeName.toLowerCase() === 'img' ) {
            e.preventDefault();
        }
    } );

更新:只是为了添加一个额外的选择,因为即使在取消选择时用户选择事件也会触发。避免一些我认为很多人遇到的一些问题的一种方法是在初始化表时他们以编程方式选择项目。您可以通过仅在表初始化后启用选择和取消选择事件来避免此触发器。

Datatables 有一个 initComplete 事件。所以就这样做吧。其中 table 是数据表引用的变量。

initComplete: function(settings, json) { 
  table.on('select', function( e, dt, type, indexes ) {

  });
}