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

Posted

技术标签:

【中文标题】再次绑定单击按钮上的排序功能【英文标题】:bind again the sorting capabilities on click button 【发布时间】:2016-11-13 00:12:28 【问题描述】:

首先,我可以禁用表头中的排序

$("button.disable-sorting").click(function()
    $("table thead th").off("click.DT");
);

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

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

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

PS:我在 DataTables 1.10.12 上

【问题讨论】:

disable a column sorting using jquery datatables的可能重复 @theinarasu:不,他的问题是数据表初始化,而我的问题是在初始化/点击事件之后。 @CodeDemon,请尝试在绑定语句中添加事件处理程序。 @Krishnakumar_Muraleedharan:对不起,我不明白,你能解释一下吗?哪个事件处理程序?和绑定语句? @CodeDemon,我的理解是绑定事件会有 $(selector).bind(eventType,eventHandlerFunction) 的语法。当您尝试再次绑定事件时,请尝试使用相同的语法吗? 【参考方案1】:

我会在初始化后立即存储原始事件侦听器。在下面的示例中,我通过将第一个 <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])
  
)  

demo -> http://jsfiddle.net/8sbcage4/(禁用/启用第一个标头的 dataTables 事件)

【讨论】:

以上是关于再次绑定单击按钮上的排序功能的主要内容,如果未能解决你的问题,请参考以下文章

Javascript/HTML/Puppeteer - 如何访问属性数据绑定中的值(单击按钮)?

删除单击的悬停事件,然后再次绑定

带有按钮的表格上的敲除映射和 foreach 数据绑定,缺少对视图模型的引用?

取消绑定 wxPython 中的默认按钮行为

将按钮绑定到VPython 7功能

为啥单击两次后我的事件侦听器与按钮解除绑定?