jquery tablesorter ajax表只排序一个方向

时间:2012-05-30 23:00:24

标签: jquery ajax sorting tablesorter

我有一个表,我通过jQuery加载命令加载。在load函数的回调中,我启动了tablesorter插件。由于某种原因,该表仅对降序进行排序而不是升序。甚至更奇怪,如果我按住shift,它将在asc和desc之间正确切换?知道这里发生了什么吗?

table.php

<table id="xyz">
<thead>
    <tr>
        <th>hi</th>
    </tr>
</thead>
<tbody>
    <tr>
        <td>a</td>
    </tr>
    <tr>
        <td>b</td>
    </tr>
    <tr>
        <td>c</td>
    </tr>
</tbody>
</table>

jquery的

$("#myDiv").load("table.php", function() {
    $("#xyz").tablesorter();
});

如果我不通过ajax加载表,则tablesorter按预期运行。

5 个答案:

答案 0 :(得分:9)

好吧所以我像Jason想的那样是双重约束。

我实际上是在一个类上调用jQuery的加载函数,我在页面上有两个div。所以它实际上是两次调用回调函数?

我认为这是一种奇怪的行为,因为加载到两个div中的内容是相同的,但看起来jQuery为每个div执行单独的ajax调用。感谢您的评论!

答案 1 :(得分:5)

以为我会在这里再提出一个答案,万一其他人遇到这个问题。当我尝试使用类选择器而不是id选择器在表上调用.tablesorter()时发生这种情况。所以从

改变它

$('.tablesorter').tablesorter();

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

(以及反映这一点的标记)为我解决了这个问题。

答案 2 :(得分:5)

再次,看看如何解决这个问题,我想分享我的不同情况。

我的表体行是从.ajax调用动态创建的,一旦用户添加/修改/删除一行,那么表体行为.removed()并使用相同的{{1}重新创建通过.ajax致电。这当然会因为表头仍然存在而对表格转发进行双重绑定,这会导致奇怪的行为。

对我来说,修复是在初始化function()之前取消绑定tablesorter,如下所示:

$('#mytable').addClass('tablesorter').tablesorter();

另一种解决方法可能是在$('#mytable') .unbind('appendCache applyWidgetId applyWidgets sorton update updateCell') .removeClass('tablesorter') .find('thead th') .unbind('click mousedown') .removeClass('header headerSortDown headerSortUp'); 调用中创建整个表,而不仅仅是正文.ajax

希望这有帮助

答案 3 :(得分:1)

问题已经解决,但我会提到我遇到了同样的问题。原因是旧版本的jquery:我有1.4.2,需要1.4.4。

答案 4 :(得分:1)

我遇到了同样的问题,但设置不同,这个帖子中提到的答案没有解决我的问题。为我的方案添加解决方案,以防其他人遇到同样的问题。

我的表体行是在页面加载时从.ajax调用动态创建的,并且一列被设置为默认sortList,以在加载数据后进行排序。

根据提交新的日期范围重新填充10列中的5列。我不重建表体,而是将数据注入适当的记录,然后根据我的默认sortList求助。

我的问题是,在提交新的日期范围后,现在在标题中定义了两次tablesorter,因此单击标题会排序两次,只显示单向排序。

我的解决方案是防止tablesorter标头被初始化两次。在页面加载时,我让tablesorter对我在我设置的sortList属性中设置的一列进行排序,但是每个新的日期范围都被提交,我使用以下行来在数据加载后对我的列进行排序:

$('#mytableBody').trigger("update");
var sorting = [[5, 1]];
setTimeout(function () {$('#mytableBody').trigger('sorton', [sorting]) }, 1);

我使用setTimeout确保数据在排序之前已完全加载。

希望这有帮助。