0

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

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

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

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

感激地收到任何帮助。非常感谢, DomC

4

2 回答 2

4

.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();
于 2013-10-08T19:15:35.483 回答
0

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

这取决于事件 ( click) 的注册方式。从第一个标题单元格中删除 class 或 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);
于 2013-10-08T19:30:14.493 回答