我的用例是一个数据表,用户可以在其中选择一行。
我的表:
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,因为它应该
帮助?
感谢。
答案 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) {
// ...
});