1

事情是这样的:文件a.php包含 jQuery Tablesorter 表。这是表格排序器代码:

 $("#feedsTable thead").live("click", function() {
       $("#feedsTable").tablesorter({
                widthFixed : true,
                dateFormat : "uk",
            }).tablesorterPager({
                container : $("#pager"),
                positionFixed : false
            });
        });

稍微剥离了表格 HTML 代码:

<div id="tablica">
    <article class="module width_full">
        <div id="pager">
            <form>
                [snip]tablesort pager stuff... 
            </form>
        </div>
        <table id="feedsTable" class="tablesorter" cellspacing="0">
            <thead>
                <tr>
                    [snip]table header row...
                </tr>
            </thead>
            <tbody> ... PHP printed table data

此外,文件a.php包含refresh链接,单击该链接时,会调用b.php包含以下代码的文件:($("#tablica").load("a.php #tablica");基本上,使用新元素打印表格,然后使用该函数b.php将旧表格替换为新表格)。load

当然,我必须使用 jQuerylive或者delegate(这个有一些问题,只是不能让 Tablesorter 工作,所以我live改用)函数,而不是(document).ready因为一旦load执行代码,Tablesorter 将无法使用新的表数据。

但问题是当我使用jQuerylive()函数时,我需要点击两次才能使用Tablesorter插件。就像第一次点击只“激活”插件,然后,当第二次点击表格标题时,表格被排序并且效果很好。

a.php,我可以添加此代码

$(document).ready(function() {
    $("#feedsTable thead").click();
});

它将“激活”插件,第一个用户单击表头将对表进行排序。但是,如果我添加$("#feedsTable thead").click();b.php文件并单击refresh链接,则此“hack”不起作用,并且需要再次单击两次才能在加载新数据的表后使用 Tablesorter 插件。

基本上,问题是:我希望 Tablesorter 在使用 jQuery 时在第一次单击时工作live,而不仅仅是在第二次单击时工作。如何解决?

任何帮助将非常感激!

谢谢。

4

2 回答 2

1

“当然,我必须使用 jQuery live 或委托”

http://api.jquery.com/live/:从 jQuery 1.7 开始,不推荐使用 .live() 方法。使用 .on() 附加事件处理程序。旧版本 jQuery 的用户应该使用 .delegate() 而不是 .live()。

试试 on() 看看它是否有很大的不同。如果没有,那么还有其他东西在起作用。

于 2012-05-31T17:16:09.793 回答
0

因此,delegate它将不起作用,因为它针对的是#tablica其中所有内容完全被load函数替换的表。live我认为,在使用文档时,委托需要一个“锚”元素来检测冒泡事件。因此,按照它的编写方式,当用户单击thead 中的任意位置时,tablesorter 将初始化。现在第二次单击实际上会对列进行排序,因为 tablesorter 处于活动状态。

无论如何,解决方案是在load回调函数中初始化 tablesorter。因此,完全删除 live 功能并尝试以下操作:

$("#tablica").load("a.php #tablica", function(){
    $("#feedsTable").tablesorter({
        widthFixed : true,
        dateFormat : "uk",
    }).tablesorterPager({
        container : $("#pager"),
        positionFixed : false
    });
});

现在,当用户单击表格标题时,它将排序,因为 tablesorter 在加载内容后立即初始化。

于 2012-05-31T17:22:30.247 回答