Datatables 单击行数据时不会触发选择事件

Datatables 单击行数据时不会触发选择事件,datatables,datatables-1.10,Datatables,Datatables 1.10,“我的表”定义了选择和取消选择处理程序,当用户单击行中的空白时,这些处理程序可以正常工作。但是,如果用户单击某些文本(创建表时定义的范围标记),则不会触发该事件 为了解决这个问题,我尝试设置一个行单击事件处理程序,它检查该行是否具有CSS属性“selected”,然后手动触发该行上相应的取消/选择事件。该解决方案在单击文本时效果良好,但不幸的是,在单击一行中的空白区域时效果不佳,因为两个事件都会触发,并且行为不是预期的 有什么办法处理这个问题吗 /* */ function createTabl

“我的表”定义了选择和取消选择处理程序,当用户单击行中的空白时,这些处理程序可以正常工作。但是,如果用户单击某些文本(创建表时定义的范围标记),则不会触发该事件

为了解决这个问题,我尝试设置一个行单击事件处理程序,它检查该行是否具有CSS属性“selected”,然后手动触发该行上相应的取消/选择事件。该解决方案在单击文本时效果良好,但不幸的是,在单击一行中的空白区域时效果不佳,因为两个事件都会触发,并且行为不是预期的

有什么办法处理这个问题吗

/*
*/
function createTable(){

    if(table != null){//Si la tabla ya existe: eliminamos filas y la destruimos.
        table.destroy();
        $('#'+tableID).empty();
    }

    table = $('#' + tableID).DataTable({
        "dom": 'Bfrtip',
        "buttons":  ['selectAll','selectNone'],
        "columnDefs": [{
            "render": function(data, type, row){
                return '<span class="label bg-info">' + data + '</span>';
            },
            "targets": 1
        },
        {
            "render": function(data, type, row){
                return '<span class="column1">' + data + '</span>';
            },
            "targets": 0
        }],
        "select": {style: 'multi'},
        "data": rows,
        "columns": columns,
        "destroy": true
    });

    table.off('select').on('select', handlerRowsSelection);
    table.off('deselect').on('deselect', handlerRowsDeselection);
    //table.off('click').on( 'click', 'tr', handlerRowClickEvent);
}

/*
*/
function handlerRowClickEvent(){
    if ($(this).hasClass('selected') ) {
        table.row(this).deselect();
    }
    else {
        table.row(this).select();
    }
}

/*
*/
function handlerRowsSelection(e, dt, type, indexes){
    if(type=="row"){
        //DOING SOMETHING
    }
}

/*
*/
function handlerRowsDeselection(e, dt, type, indexes){
    if(type=="row"){
        //DOING SOMETHING
    }
}
/*
*/
函数createTable(){
如果(table!=null){//Si la tabla ya existe:eliminamos filas y la destruimos。
表1.destroy();
$('#'+tableID).empty();
}
table=$('#'+tableID).DataTable({
“dom”:“Bfrtip”,
“按钮”:['selectAll','selectNone'],
“columnDefs”:[{
“渲染”:函数(数据、类型、行){
返回“”+数据+“”;
},
“目标”:1
},
{
“渲染”:函数(数据、类型、行){
返回“”+数据+“”;
},
“目标”:0
}],
“选择”:{style:'multi'},
“数据”:行,
“列”:列,
“毁灭”:真的吗
});
table.off('select')。on('select',handlerRowsSelection);
表.off('deselect')。on('deselect',handlerRowsDeselection);
//表.off('click')。on('click','tr',handlerRowClickEvent);
}
/*
*/
函数句柄RowClickEvent(){
if($(this).hasClass('selected')){
table.row(this).deselect();
}
否则{
table.row(this.select();
}
}
/*
*/
函数句柄箭头选择(e、dt、类型、索引){
如果(类型=“行”){
//做某事
}
}
/*
*/
函数句柄行选择(e、dt、类型、索引){
如果(类型=“行”){
//做某事
}
}

这里有一个关于codepen的基本示例,不确定为什么您的示例不起作用,因为它看起来是正确的。尝试一次一件地修改代码笔,以了解您所拥有的内容,这可能有助于确定问题的原因

HTML

名称
位置
办公室
年龄
开始日期
薪水
名称
位置
办公室
年龄
开始日期
薪水
老虎尼克松
系统架构师
爱丁堡
61
2011/04/25
$320,800
加勒特温特斯
会计
东京
63
2011/07/25
$170,750
CSS

JS

$(文档).ready(函数(){
var t=$('#示例')。数据表({
选择:{style:'multi'}
} );
t、 关闭(“选择”)。打开(“选择”),功能(e、dt、类型、索引){
控制台日志(“选定”);
log(e,dt,type,index);
} );
t、 关闭(“取消选择”)。打开(“取消选择”),功能(e、dt、类型、索引){
console.log(“取消选择”);
log(e,dt,type,index);
} );
} );

请给我们看一些代码。我在问题中添加了一些代码。很抱歉延迟发布代码。很好,您更新了问题,但我仍有一些困难要复制,您可以使用此fiddle->@davidkonrad这里您有一个工作fiddle->,除了行没有将自己标记为选中(仅在视觉上,内部是)。但是如果你看到浏览器控制台,你可以理解问题中描述的行为。一个完整的答案,完整的代码和工作演示。不承认或不接受它是粗鲁的。对我来说,代码笔没有显示选择事件,只有取消选择-但是这里有足够的内容来解决我的问题。非常感谢:)