我有一个表,我通过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按预期运行。
答案 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确保数据在排序之前已完全加载。
希望这有帮助。