jQuery live()和Tablesorter - 第一次点击不起作用

时间:2012-05-31 16:45:24

标签: tablesorter jquery

这就是:文件a.php包含jQuery Tablesorter表。 这是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函数替换旧表。

当然,我必须使用jQuery livedelegate(对此问题有一些问题,只是无法使Tablesorter工作,所以我使用{{1}而不是live的函数,因为一旦执行(document).ready代码,Tablesorter将无法使用新的表数据。

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

live()中,我可以添加此代码

a.php

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

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

非常感谢任何帮助!

感谢。

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

因此,delegate无效,因为它定位于#tablica内的表格,其中所有内容都完全被load函数取代。委托需要一个“锚”元素来检测冒泡事件,而live使用该文档,我认为。因此,它的编写方式,当用户点击thead中的任何位置时,tablesorter将初始化。现在,第二次单击将实际对列进行排序,因为tablesorter处于活动状态。

无论如何,解决方案是在load回调函数中初始化tablesorter。所以完全删除实时功能并试试这个:

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

现在,当用户点击表头时,它会进行排序,因为在加载内容后会立即初始化tablesorter。