【问题标题】:Datatables select row programmatically without triggering select event数据表以编程方式选择行而不触发选择事件
【发布时间】:2021-03-24 04:14:17
【问题描述】:

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

https://datatables.net/reference/api/row().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 是行对象吗?我一无所知。

【问题讨论】:

  • 您找到解决方案了吗?

标签: javascript datatables


【解决方案1】:

我知道这个问题已经很老了,但是对于以后来这里的人可能会想要一个答案。

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 ) {

  });
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-11
    • 2021-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多