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 для обеспечения полной загрузки данных перед сортировкой.

надеюсь, что это помогает.