jquery tablesorter ajax表只排序一个方向

Dev*_*man 9 sorting ajax jquery 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>
Run Code Online (Sandbox Code Playgroud)

jQuery的

$("#myDiv").load("table.php", function() {
    $("#xyz").tablesorter();
});
Run Code Online (Sandbox Code Playgroud)

如果我不通过ajax加载表,那么tablesorter按预期运行.

Dev*_*man 9

好的,所以我像Jason想的那样是双重约束力的.

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

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


nic*_*tme 5

只是想我会在这里抛出另一个答案,万一其他人遇到这个问题.当我尝试.tablesorter()使用类选择器而不是id选择器调用表时发生这种情况.所以改变它

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

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

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


Sta*_*oid 5

再次,看看如何解决这个问题,我想分享我的不同场景.

我的表体行是通过.ajax调用动态创建的,一旦用户添加/修改/删除一行,那么表体行将通过.removed()相同的.ajax调用重新创建function().这当然是双重绑定tableorter,因为表头仍然存在,这导致奇怪的行为.

对我来说,修复是在初始化之前取消绑定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');
Run Code Online (Sandbox Code Playgroud)

另一个修复可能是在.ajax调用中创建整个表而不仅仅是正文<tr>.

希望这可以帮助