2017-03-16 134 views
0

我想弄清楚如何在数据表中创建组选择/取消选择。表中的每一行都标有一个组(整数),对于任何给定的选择,它应该选择/取消选择具有相同组号的所有其他项目。我觉得我和下面的代码非常接近......但是,不幸的是,当我选择相关的行时,他们依次触发select事件,这是一个无休止的循环,我正在玩e.preventDefault(),但那并没有“ t似乎有帮助。任何建议,非常感谢。谢谢!DataTables组选择/取消选择

 table.on("select", function(e, dt, type, indexes) { 

      var data = table.rows(indexes).data(); 
      var group = data[0]['Group']; 

      table.rows(function(idx, rowData, node) { 
       return rowData.Group === group; 
      }).select(); 

     }); 

回答

1

,可以分离事件处理程序,选择其他行前和选择后重新连接,如下所示:

function onSelect(e, dt, type, indexes){ 
    var data = dt.rows(indexes).data(); 
    var group = data[0]['Group']; 

    // Detach event hanlder 
    dt.off('select', onSelect); 

    dt.rows(function(idx, rowData, node) { 
     return rowData.Group === group; 
    }).select(); 

    // Re-attach event hanlder 
    dt.on('select', onSelect); 
}); 

table.on('select', onSelect); 

您也可以使用全局变量,例如:

var ignoreSelect = false; 
table.on("select", function(e, dt, type, indexes) { 
    if(ignoreSelect){ return; } 

    var data = dt.rows(indexes).data(); 
    var group = data[0]['Group']; 

    ignoreSelect = true; 

    dt.rows(function(idx, rowData, node) { 
     return rowData.Group === group; 
    }).select(); 

    ignoreSelect = false; 
}); 
+0

谢谢!看起来很直......很难相信我没有想到任何这些选项。 – GargantuanTezMaximus