jQuery tablesorter 插件在 AJAX 调用后不起作用

Posted

技术标签:

【中文标题】jQuery tablesorter 插件在 AJAX 调用后不起作用【英文标题】:jQuery tablesorter plugin does not work after AJAX call 【发布时间】:2011-03-13 18:16:06 【问题描述】:

我在我的代码中使用了 jQuery 表格排序器插件。只要我不发出 ajax 请求来动态加载表数据,它就可以正常工作。我正在使用组合框通过 ajax 过滤表格的内容。我读了几篇文章说使用$("table").trigger("update"); 可以解决我的问题。我用我的代码试过了,但问题仍然存在。

还有其他方法可以解决这个问题吗?请帮我找出解决方案。我真的很糟糕。任何帮助,将不胜感激。以下是我的代码:

$(document).ready(function () 
    $("#myTable").tablesorter(
        widthFixed: true,
        widgets: ['zebra'],
        headers: 
            0: 
                sorter: false
            
        
    ).tablesorterPager(
        container: $("#pager")
    );

    $("#tag").change(function (event) 
        $('#myTable').trigger("update");
        $("#myTable").tablesorter();
    );
);

这里的tag是一个名为tag的组合框的id,myTable是带有sorter pager插件的表的id。

【问题讨论】:

你的 ajax 调用在哪里? 【参考方案1】:

尚不清楚您用于进行 AJAX 调用的机制,但如果是 ASP.NET UpdatePanel,那么您需要在 AJAX 调用完成后重新绑定 jQuery 事件。

将以下内容添加到您的脚本中

var prm = Sys.WebForms.PageRequestManager.getInstance();
prm.add_beginRequest(function(sender, args) 
    // Code to rebind your UI
);

注意:仅当您使用 ASP.NET AJAX 时才有效

【讨论】:

【参考方案2】:

新的 DOM 元素没有绑定到 javascript 事件。 jQuery 使用它的“实时”功能处理类似的问题。 AJAX 调用完成后,重新运行 document.ready() 中的 javascript。

【讨论】:

【参考方案3】:

我会将 tablesorter 函数包装在它自己的函数中。

然后,当您需要重新运行它时 - 只需再次调用它。

$(document).ready(function () 
    function resortTable() 
          $("#myTable").tablesorter(
            widthFixed: true,
            widgets: ['zebra'],
            headers: 
                0: 
                    sorter: false
                
            
        ).tablesorterPager(
            container: $("#pager")
        );
    

        $("#tag").change(function() 
            resortTable();
        );
);

【讨论】:

甚至不知道为什么会这样,但确实如此......我也在使用 jPaginator 进行分页,所以在我的函数中也添加了 BEFORE .. 干得好,一直在扯我的头发这一天!!!! @Venkat Re OP:“这里的 tag 是名为 tag 的组合框的 id,myTable 是带有分拣机分页器插件的表的 id。” 它不起作用。我尝试了相同的代码。为什么 sorter() 不起作用。 @Venkat 值得注意的是这个帖子已经有 3 年历史了——事情可能已经改变了【参考方案4】:

问题是您在组合框更改时调用$('#myTable').trigger("update"); 代码,而不是在您从 AJAX 请求中获得响应时。如果您使用的是 ASP.NET AJAX,请尝试发布的代码 ericphan。如果您使用的是 jQuery AJAX,请尝试以下操作:

$.get('http://site.com/request-address', function(data) 

    // Code you're using to replace the contents of the table

    // Code to rebind the tablesorter
    $('#myTable').trigger("update");
    $("#myTable").tablesorter();
);

这样,您将 tablesorter 重新绑定到新的表格内容,而不是即将被替换的旧内容。

【讨论】:

【参考方案5】:

我会考虑为此使用 livequery 插件...它可以创造奇迹

http://docs.jquery.com/Plugins/livequery

【讨论】:

【参考方案6】:

我知道这是一篇旧帖子,但也许我的回答会帮助其他人在谷歌上搜索同样的问题。我通过调用解决了这个问题

$('#myTable').tablesorter();

在我的 AJAX 调用之后再次。

【讨论】:

以上是关于jQuery tablesorter 插件在 AJAX 调用后不起作用的主要内容,如果未能解决你的问题,请参考以下文章

jQuery tablesorter 页面插件不起作用

jQuery插件Tablesorter错误地对日期进行排序

问题:使用 jquery 插件 tablesorter 进行表格排序和分页

tablesort jquery 插件在谷歌浏览器中工作吗

IE7中的jQuery tablesorter插件列宽不正确

tablesorter-jQuery插件用法