【问题标题】:How to remove on click from sorting table header如何从排序表标题中删除单击
【发布时间】:2013-10-09 03:36:24
【问题描述】:

第一次发帖,虽然我一直在听从这里的有用建议。

我有一个表格,它通过一些我自己没有构建的 Jquery 函数进行排序,所以不确定它是如何运作的。如果单击标题列,它会先按该列对表格进行排序,然后再向下排序 - 标准内容。我想删除第一列的排序,因为这是一系列复选框,并且排序会干扰移动设备上的 checkall 功能。

我尝试过使用以下脚本。首先删除排序类,然后尝试删除单击功能。该类正在被删除(因此 javascript 正在工作),但仍然可以单击标题,此时分配了一个新类,因此这个 removeAttr 并没有真正起作用(这是我在这个网站上找到的解决方案)。

<script>
!function ($) {   
    $(function(){   
        $('th:first-child').removeClass( "sorting" );   
        $('th:first-child').removeAttr('onclick');
    })
}(window.jQuery)
</script>

感谢您的任何帮助。非常感谢,DomC

【问题讨论】:

  • 点击事件是如何注册的?
  • 不要试图撤消你不理解的其他代码所做的事情......去其他代码并从源头修复它。
  • @KevinB 可能存在不允许或没有技能/时间来修改该表排序器代码源的情况。做这么小的猴子补丁真的有害吗?
  • 在维护方面,是的,它可能非常有害。像这样的猴子补丁可能会花费另一个不知道它的开发人员很多小时的工作时间来试图找出他的排序不起作用的原因。

标签: javascript jquery dom


【解决方案1】:

.removeAttr('onclick') 不起作用的原因是因为有一个全局事件处理程序,可能在某个 .js 文件中(这是正确的位置!)。 onclick 将是内联 javascript,这是一个禁忌!

要将其从全局事件处理程序列表中取出,请使用 jQuery 的.off()

// this removes all functions bound on the 'click event
$('th:first-child').off('click');

或者,如果你有旧版本的 jQuery,.unbind():

// this removes all functions bound on the 'click event (older jQuery example)
$('th:first-child').unbind('click');

或者,如果您只想关闭一个功能:

// If ´otherFunction´ is bound to click aswell, it will remain working
$('th:first-child').off('click', functionname);

或者,删除所有事件(即点击、悬停、调整大小):

// Or the big cleanup, this clears ALL functions from ALL events
$('th:first-child').off();

【讨论】:

  • 你能详细解释一下 removeAttr('onclick') 和全局事件处理程序吗?在什么时候 onclick="something" 被解析,为什么删除它不起作用。
  • 感谢 Martijn(和其他所有人)对此事的快速回应。第一个有效。有一个奇怪的怪癖,当您选择其他标题之一来对该列进行排序时,某处的一些 javascript 将应用回我已删除的类。是否有像 .off 这样的功能可以应用,当您对另一列进行排序时,它会阻止重新引入该类。
  • 如果您认为是,请将答案标记为解决方案 :) 回答您的其他问题:我认为您应该寻找正在做的事情并解决它。解决问题比隐藏问题更好
【解决方案2】:

@Martijn 答案可能会做你想做的事。但我在这里提供更多细节。

这取决于事件 (click) 的注册方式。 从第一个标题单元格中删除类或 onclick 属性可能无济于事。

它们可能已用于将 onclick 事件绑定到该元素。但是您需要取消绑定事件。

当用户点击标题单元格时,它会触发一个事件。有些方法绑定到在触发器上执行的事件。可能有一个或多个这样的方法在事件上执行。

在这种情况下,事件是click

要删除click 的所有方法的绑定,您可以使用以下 -

$('th:first-child').off('click');

//For old Jquery Version as mentioned by @Matijn
//$('th:first-child').unbind('click');

如果您想取消绑定特定方法 -

$('th:first-child').off('click', reference_to_function);

【讨论】:

  • 我相信我有相同的信息,只删除 1 个函数或事件,我会更清楚一点:)
  • 我最初是在编辑您的答案。因为我认为 OP 一开始就不知道这些事件。
猜你喜欢
  • 2022-07-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-22
  • 1970-01-01
相关资源
最近更新 更多