10

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

表.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 会按预期运行。

4

5 回答 5

11

好吧,所以我像杰森想的那样双重绑定。

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

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

于 2012-06-04T16:33:59.603 回答
5

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

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

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

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

于 2013-05-20T07:01:10.363 回答
5

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

我的表体行是通过.ajax调用动态创建的,一旦用户添加/修改/删除一行,表体行就会通过.removed()相同的.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而不仅仅是 body<tr>的。

希望这可以帮助

于 2013-12-05T16:41:16.000 回答
1

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

于 2013-01-22T20:21:49.847 回答
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 来确保数据在排序前完全加载。

希望这可以帮助。

于 2015-02-14T00:15:27.020 回答