AJAX调用后,jQuery tablesorter插件无效

时间:2010-07-09 08:14:16

标签: jquery ajax jquery-plugins tablesorter

我在我的代码中使用了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。

6 个答案:

答案 0 :(得分: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时才有效

答案 1 :(得分:1)

新的DOM元素未绑定到JavaScript事件。 jQuery使用它的'live'函数处理类似的问题。完成AJAX调用后,重新运行document.ready()中的javascript。

答案 2 :(得分:1)

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

然后,无论何时需要重新运行它 - 只需再次调用它。

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

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

答案 3 :(得分:0)

问题是你在组合框改变时调用$('#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重新绑定到新表内容,而不是将要替换的旧内容。

答案 4 :(得分:0)

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

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

答案 5 :(得分:0)

我知道这是一个老帖子,但也许我的答案会帮助其他人搜索同样的问题。我通过调用

解决了这个问题
$('#myTable').tablesorter();
在我的AJAX电话之后再次发送。