jQuery tablesorter ajax таблица сортировка только в одном направлении
у меня есть таблица, которую я загружаю с помощью команды загрузки jQuery. в обратном вызове функции load я инициирую плагин 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 функционирует так, как ожидалось.
5 ответов
хорошо, я был двойным связыванием, как думал Джейсон.
Я фактически вызывал функцию загрузки jQuery в классе, и у меня было два div с этим классом на моей странице. Так он действительно вызывал функцию обратного вызова дважды?
Я думаю, что это странное поведение, поскольку контент, загружаемый в оба divs, был одинаковым, но похоже, что jQuery делает отдельный вызов ajax для каждого из divs. Спасибо за ваши комментарии!
просто подумал, что я брошу еще один ответ здесь, Если кто-то еще столкнется с этим. Это случилось со мной, когда я пытался позвонить .tablesorter()
на таблице с использованием селектора классов вместо селектора идентификаторов. Так меняя его с
$('.tablesorter').tablesorter();
to
$('#tablesorter').tablesorter();
(и разметка, чтобы отразить это) исправлена эта проблема для меня.
еще раз, видя, как это было решено, я хотел бы поделиться своим другим сценарием.
мои строки тела таблицы создаются динамически из .ajax
вызов, как только пользователь добавляет/изменяет / удаляет строку, то строки тела таблицы .removed()
и заново с тем же .ajax
звонок через function()
. Это, конечно, дважды связывает tablesorter, так как головка таблицы остается, что вызывает странное поведение.
исправление для меня было развязать 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
вызов, а не только тело <tr>
s.
надеюсь, что это помогает
проблема уже решена, но я упомяну, что у меня была та же проблема. Причина была в старой версии jquery:у меня был 1.4.2, 1.4.4.
У меня была та же проблема, но другая настройка, и ответы, отмеченные в этом потоке, не решили мою проблему. Добавление решения для моего сценария в случае, если у кого-то есть та же проблема, что и у меня.
мои строки тела таблицы создаются динамически из an .ajax вызов при загрузке страницы и один столбец устанавливается в качестве списка сортировки по умолчанию для сортировки после загрузки данных.
5 из 10 столбцов повторно заполняются на основе отправки нового диапазона дат. Я не перестраиваю тело таблицы, но скорее вводил данные в соответствующие записи, а затем прибегал к моему sortList по умолчанию.
моя проблема заключалась в том, что после отправки нового диапазона дат tablesorter теперь был определен дважды в заголовке, поэтому щелчок по заголовку будет сортировать дважды, появляясь только для сортировки в одну сторону.
мое решение состояло в том, чтобы предотвратить инициализацию заголовка tablesorter дважды. При загрузке страницы я позволяю tablesorter сортировать один столбец, который я установил в свойстве sortList, но каждый новый диапазон дат отправлен, я использую следующие строки для сортировки столбца после загрузки данных:
$('#mytableBody').trigger("update");
var sorting = [[5, 1]];
setTimeout(function () {$('#mytableBody').trigger('sorton', [sorting]) }, 1);
Я использую setTimeout для обеспечения полной загрузки данных перед сортировкой.
надеюсь, что это помогает.