再次绑定单击按钮上的排序功能

时间:2016-07-11 06:18:24

标签: javascript jquery datatables

首先,我可以通过

禁用表头中的排序
$("button.disable-sorting").click(function(){
    $("table thead th").off("click.DT");
});

现在我的问题是如何绑定表头上的排序,我试过

$("button.restore-sorting").click(function(){
    $("table thead th").bind("click.DT");
});

但似乎没有用。关于如何绑定数据表表头的排序功能的任何帮助想法?

PS:im on DataTables 1.10.12

1 个答案:

答案 0 :(得分:2)

我会在启动后立即存储原始事件监听器。在下面的示例中,我通过将它们保存到数组映射<th>来保留第一个events的所有事件:

var table = $('#example').DataTable({
  initComplete: function() {
    $.each($._data($('#example thead th')[0], 'events'), function(name, obj) {
      events[name] = obj[0]
    })
  }
})  

现在,您可以在表单

上找到“本机”dataTables事件的地图
events['click'] => old event handler
events['keypress'] => old event handler
...

然后,为特定标头(或所有标头)打开和关闭排序(以及其他dataTables事件驱动功能)非常简单。这是一个带有禁用/启用按钮的小型演示:

//remove original event listeners, add alternative 
$("#disable").click(function() {
 $("#example thead th:nth-child(1)")
   .unbind()
   .bind('click', function() { 
      alert('all listeners removed')
   })
})  
//restore any original event 
$("#enable").click(function() {
  var $th = $("#example thead th:nth-child(1)")
  $th.unbind()
  for (var name in events) {
    $th.bind(name, events[name])
  }
})  

演示 - &gt; http://jsfiddle.net/8sbcage4/ (禁用/启用第一个标头的dataTables事件)