在jQuery中检索click()处理程序以供以后使用

时间:2010-04-13 04:42:59

标签: javascript jquery jquery-plugins tablesorter

我正在使用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'错误。

我是否走正路?我有一种感觉,就我迄今为止所发现的,我可以做到这一点,但它会比我预期的更加丑陋。

1 个答案:

答案 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');
    });
});