我每次重新加载数据时都只能选择我的Datatable的行

时间:2017-07-31 14:04:23

标签: javascript jquery datatables

我的用例是一个数据表,用户可以在其中选择一行。

我的表:

ts_table = $('#ts_table').DataTable({
iDisplayLength: 5,
lengthMenu: [5, 10, 20, 50, 100],
order: [[ 1, "asc" ]],
columns : [
    {data:'ts_id'},
    {data:'ts_name', width: '20%'},
    {data:'ts_desc', width: '80%'}
    ],
columnDefs: [{
    targets: [ 0 ],
    visible: false,
    searchable: false}
    ]
});

我的事件处理程序代码由客户端生成的事件调用(文档就绪以及用户更新数据表源时):

function process_all_test_sets(msg) {
    if (ts_table.data().any()) {
        ts_table.rows().remove().draw();
    } else {
        all_test_sets_array = msg.data.split("|");
        test_set_list = JSON.parse(all_test_sets_array[1]);
        console.info("Adding rows to test set table.");
        ts_table.rows.add(test_set_list).draw();
        $('#ts_table tbody').on('click', 'tr', function (event) {
            data = ts_table.row(this).data();
            console.info("Clicked " + this);
            if ($(this).hasClass('selected')) {
                $(this).removeClass('selected');
                test_set_test_sets = [];
            }
            else {
                $(this).removeClass('selected');
                $(this).addClass('selected');
                if (test_set_test_sets.length > 0) {
                    test_set_test_sets.shift();
                }
                test_set_test_sets.push(data);
            }
        });
    }
}

我的问题是,每当我尝试刷新数据(而不是文档)时,事件处理程序都不会将所选类添加到我的行中,即使我可以看到它填充并清除test_set_test_sets,因为它应该

帮助?

感谢。

1 个答案:

答案 0 :(得分:0)

问题很可能是您多次调用forwards因此多次定义事件处理程序。

相反,您只需要定义一次事件处理程序并将其移出process_all_test_sets()

例如:

process_all_test_sets()

或者,您可以使用off()方法删除以前定义的事件处理程序。例如:

ts_table = $('#ts_table').DataTable({
   // ...
});

$('#ts_table tbody').on('click', 'tr', function (event) {
   // ...
});

function process_all_test_sets(msg) {
   // ...
});