数据表、分页和选行问题

问题描述 投票:0回答:1

我有一个应用程序,它使用一个带分页的数据表。 用户在表中选择一行,然后在表下面显示一个报表。 用户可以编辑报表。 如果用户试图在表中选择另一行,而不保存任何待定的编辑,他们会被警告,并有机会回到先前选择的行,并保存更改或继续到下一行。 如果两行都显示在表格的同一页,这个功能就很好用。

但是,如果用户有未保存的编辑,而不是在同一页选择另一行,用户选择了另一页。 用户就会收到警告,并决定返回到正在编辑的行,这就不太符合我的要求了。 在这种情况下,用户成功地返回到上一个页面,但我想不出如何将之前选中的行显示为选中(尽管该行确实有选中的类)。

我在最新的代码中看到的是,在新页面中,在页面返回到上一个页面之前,行(有正确的索引)被选中了。当然,在前一个页面中选择的行并没有被选中。

在页面事件处理程序中,有两行值得关注的内容。

      //return to previous page
      dt_table.page(pageIndexToReturn).draw('page');  

      //set selection on previously selected row
      dt_table.row(rowIndexToReturn, pageIndexToReturn).select();

这是整个页面事件处理程序

   dt_table.on('page.dt', function () {
        var info = dt_table.page.info();
        var newPageIndex = info.page;
        var state = dt_table.state();
        var delta = (info.start-state.start)/state.length;
        var pageIndexToReturn = Math.floor(Math.abs(newPageIndex - delta) );

        var oldRow = getCurrentRow();
        var rowIndexToReturn = $('#selectedRowIndex').val();
        dt_table.$('tr.selected').removeClass('selected');   //need this here

        determine(this).then(function(result) {
            var enabled = result['enabled'];
            if (enabled === 'true') {
                showModal().then(function(save) {
                    if (save == 'true') {  
                        //return to previous page
                        dt_table.page(pageIndexToReturn).draw('page');  

                        //set selection on previously selected row
                        dt_table.row(rowIndexToReturn, pageIndexToReturn).select();
                    }
                    else {
                        clearSelectedReports();
                    }
                })
            }
            else {
                clearSelectedReports();
            }
        })
    });

问题是为什么在上一个页面设置之前,行就被选中了?它的行为就像行选择语句是在页选择语句之前执行的?

有什么想法可以解决这个问题吗?

javascript jquery datatables
1个回答
3
投票

我添加了一个 draw 事件处理程序,它在 page 处理程序返回后被调用。 绘制事件处理程序会重置我的行选择。

© www.soinside.com 2019 - 2024. All rights reserved.