jquery tablesorter ajax表只对一个方向进行排序

jquery tablesorter ajax表只对一个方向进行排序,jquery,ajax,sorting,tablesorter,Jquery,Ajax,Sorting,Tablesorter,我有一个通过jQuery load命令加载的表。在load函数的回调中,我启动了tablesorter插件。出于某种原因,表只按降序排序,不按升序排序。更奇怪的是,如果我按住shift键,它将在asc和desc之间正确切换?知道这是怎么回事吗 table.php <table id="xyz"> <thead> <tr> <th>hi</th> </tr> </thead> <

我有一个通过jQuery load命令加载的表。在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>

如果我没有通过ajax加载表,那么tablesorter将按预期运行。

好的,所以我像Jason所想的那样进行了双重绑定

我实际上是在一个类上调用jQuery的load函数,在我的页面上有两个与该类相关的div。那么它实际上调用了两次回调函数


我认为这是一种奇怪的行为,因为加载到两个div中的内容是相同的,但jQuery似乎对每个div都进行了单独的ajax调用。谢谢你的评论

这个问题已经解决了,但我要说的是,我也遇到了同样的问题。原因是在jquery的旧版本中:我有1.4.2,需要1.4.4。

我想我会在这里抛出另一个答案,以防其他人遇到这个问题。当我试图使用类选择器而不是id选择器对表调用
.tablesorter()
时,我遇到了这种情况。所以从

$('.tablesorter').tablesorter()

$('#tablesorter').tablesorter()


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

再一次,看看这是如何解决的,我想分享我的不同场景

我的表体行是通过
.ajax
调用动态创建的,一旦用户添加/修改/删除一行,那么表体行将
.removed()
并通过
函数()
使用相同的
.ajax
调用重新创建。这当然会双重绑定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
调用中创建整个表,而不仅仅是主体


希望这有帮助

我遇到了相同的问题,但设置不同,并且此线程中记录的答案没有解决我的问题。为我的场景添加解决方案,以防其他人遇到与我相同的问题

我的表体行是在页面加载时通过.ajax调用动态创建的,其中一列被设置为默认排序列表,以便在加载数据后进行排序

在提交新的日期范围的基础上,10列中有5列重新填充。我不重建表体,而是将数据注入到适当的记录中,然后根据默认的排序列表进行排序

我的问题是,在提交了一个新的日期范围之后,表排序器现在在标题中定义了两次,因此单击标题将进行两次排序,似乎只进行了一次排序

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

$('#mytableBody').trigger("update");
var sorting = [[5, 1]];
setTimeout(function () {$('#mytableBody').trigger('sorton', [sorting]) }, 1);
我使用setTimeout来确保数据在排序之前已完全加载


希望这能有所帮助。

如果我真的快速单击,它看起来像是升序排序,但又是降序排序。您是否在文件中的任何其他位置声明了
.tablesorter()
?您可能是双重绑定的…好主意,但不,我只是在调用.tablesorter(),您可以共享一个实时演示吗?或者告诉我们是否存在任何javascript错误。你试过调试模式吗?我也有同样的问题,我在头上加载了两个版本的jquery。你的问题让我来解决,谢谢你的回答,因为我在插件文档中找不到删除以前绑定的方法。
$('#mytableBody').trigger("update");
var sorting = [[5, 1]];
setTimeout(function () {$('#mytableBody').trigger('sorton', [sorting]) }, 1);