我正在使用jQuery tablesorter plugin对表进行排序,该表将.click()处理程序分配给表中的<th>
。由于我的表格为每列提供了交替的颜色,因此我构建了一个简单的fix_table_colors(identifier)
函数,当我使用Firebug手动调用它时,它可以正常工作。但是,我想在排序后自动调用它。
为此,我决定从<th>
中检索.click()处理程序,并分配一个新的处理程序,它只调用前一个处理程序,然后是fix_table_colors()
。
(This SO问题类似,但使用标准的onClick()属性,这在这里不起作用。)
从接受的this question答案中,我创建了以下代码:
$(document).ready(function() {
$("table.torrents").tablesorter({
debug: true,
headers: {
1: { sorter: 'name' },
2: { sorter: 'peers' },
3: { sorter: 'filesize' },
4: { sorter: 'filesize' },
5: { sorter: 'filesize' },
6: { sorter: 'ratio' }
}
});
$('table.torrents thead th').each(function() {
var th = $(this);
var clickHandler = th.data('events').click[0];
th.click(function() {
clickHandler();
fix_table_colors('table.torrents');
});
});
});
虽然这在概念上是正确的,但clickHandler
似乎并不是一个函数,因此我无法调用它。
在Firebug中进行了一些挖掘,我发现click [3]似乎保留了我正在寻找的功能(并点击[10]我的新功能)。但是,在使用它的时候,我在tablesorter.min.js的第2行遇到了'e is undefined'错误。
我是否走正路?我有一种感觉,就我迄今为止所发现的,我可以做到这一点,但它会比我预期的更加丑陋。
答案 0 :(得分:4)
如何绑定到sortEnd(http://tablesorter.com/docs/example-triggers.html)事件呢?
$(document).ready(function() {
$("table.torrents").tablesorter({
debug: true,
headers: {
1: { sorter: 'name' },
2: { sorter: 'peers' },
3: { sorter: 'filesize' },
4: { sorter: 'filesize' },
5: { sorter: 'filesize' },
6: { sorter: 'ratio' }
}
});
$("table.torrents").bind("sortEnd",function() {
fix_table_colors('table.torrents');
});
});