Ошибка jQuery Tablesorter - PullRequest
       4

Ошибка jQuery Tablesorter

16 голосов
/ 16 декабря 2010

Только что обновлен до последней таблицы и выглядит как сломанный или что-то. Каждый раз, когда я пытаюсь открыть свою страницу, Firebug говорит:

table.config.parsers не определен

И это просто нарушает весь мой Javascript. Если я вернусь к версии таблиц, она будет работать нормально.

Javascript:

$("#List").tablesorter({ 
    widgets: ['zebra'],
    headers: { 
        4: { sorter: false }
    }
})

HTML:

<table id="List" class="tablesort ui-widget-content ui-corner-top">
    <thead>
      <tr class="ui-widget">
          <th>Pa&iacute;s</th>
          <th>ISO</th>
          <th>ISO3</th>
          <th>CODE</th>
          <th>&nbsp;</th>
      </tr>
    </thead>
    <tbody>
    </tbody>
</table>

Ответы [ 7 ]

14 голосов
/ 29 июля 2011

Я только что столкнулся с этой ошибкой, поэтому я решил опубликовать ответ на случай, если у кого-то еще возникнут проблемы с ним позже.

Хотя в приведенном выше ответе об этом нет упоминания, я смог воспроизвести ошибку, сначала создав экземпляр таблицыorter (), а затем вызвав запрос на сортировку.

Этот порядок событий будет необходим при добавлении или замене существующих данных таблицы новыми данными через AJAX или иным образом, например:

// populate our table body with rows
$("#myTable tbody").html(json.tbody);

// let the sorting plugin know that we made a update
$("#myTable").trigger("update");

// set sorting column and direction, this will sort on the first and third column
var sorting = [[2,1],[0,0]];

// sort
$("#myTable").trigger("sorton",[sorting]);

Комбинация события "update" и "sorton", кажется, вызывает ошибку. Ко времени обработки события sorton DOM еще не был назначен table.config.parsers - таким образом, ошибка.

Исправление заключается в том, чтобы обернуть обработку события sorton за 1 миллисекунду.

Заменить существующую привязку sorton в jquery.tablesorter.js (строка ~ 803) следующим текстом:

}).bind("sorton", function (e, list) {
    var me = this;
    setTimeout(function () {
        $(this).trigger("sortStart");
        config.sortList = list;
        // update and store the sortlist
        var sortList = config.sortList;
        // update header count index
        updateHeaderSortCount(me, sortList);
        // set css for headers
        setHeadersCss(me, $headers, sortList, sortCSS);
        // sort the table and append it to the dom
        appendToTable(me, multisort(me, sortList, cache));
    }, 1);

tablesorter () действительно удобный плагин. Спасибо Кристиану за то, что выпустили его.

13 голосов
/ 27 марта 2011

Немного поздно, но это потому, что у вас есть пустой / нет <tr> элемент в <tbody>, и он ожидает по крайней мере один <tr>.

1 голос
/ 24 марта 2015

Похоже, проблема в том, что если таблица заполняется с помощью JavaScript, сортировщик таблиц не найдет новый контент, если браузер не отобразит новый контент.

Удаление табличного сортировщика внутри процедуры setTimeout () удаленоэта ошибка для меня.

    function initPage() {
        fillMyTable();
        // Init table sorter, but give the browser a second to draw the new table
        setTimeout(function(){ $("#my_table").tablesorter(); }, 1000);
    }
1 голос
/ 23 марта 2015

Я попробовал некоторые из ответов выше, но они не помогли на каждой странице, где мы использовали TableSorter. Основная причина, по которой я понял ошибку, состоит в том, что c = sortList [i] [0] не определен либо потому, что у нас есть пустой TR, либо у нас нет того же числа TD, что и у TH.

У меня было 8 TH / TD на случай, если у меня есть данные таблицы, и 8 TH & single TD на случай, если мне нечего показать. Мне удалось проверить, нет ли у меня табличных данных, затем не вызывать TableSort для сортировки по определенным столбцам, которых не существует. Это добилось цели. Может помочь кому-то с похожим сценарием

if(tableData.length != 0){
  $("#myid").tablesorter( {sortList: [[2,0]]});
}
0 голосов
/ 01 мая 2018

Я столкнулся со случаем, когда я получил это сообщение об ошибке без специального обновления таблиц сортировки, но только потому, что количество столбцов в элементе tfoot не совпадает с количеством столбцов в thead и tbody, поэтомуПлагин tablesorter может запутаться из-за этого.

Эту ошибку можно совершить в тот же день, что и обновление tableorter.Я подумал, что тоже поделюсь этим трюком в этой теме для дальнейшего использования.

0 голосов
/ 01 декабря 2015

Обратите внимание, что таблица таблиц Пример AJAX демонстрирует только сценарий, в котором новые строки добавляются к существующим.Когда таблица динамически очищается и заполняется новыми строками, вышеупомянутая ошибка появляется.

Добавление пустой строки

<tr style="display:none"><td></td>...<td></td></tr>

с тем же числом <td> с, что и число <th> с в заголовке, устраняет ошибку, но вводит еще одну: после таблицыочищается и заполняется реальными строками, новые строки добавляются к старым.

В качестве альтернативы изменению исходного кода TableSorter попробуйте следующую последовательность вызовов:

$("#my-table").trigger("update");
setTimeout(function() { 
    /* e.g. sort by the second column in descending order */
    var sorting = [[1, 1]];
    $("#my-table").trigger("sorton", [sorting]);
}, 100);
0 голосов
/ 04 декабря 2014

Еще один ответ на тот случай, если кто-нибудь столкнется с тем же сценарием, что и я.Очевидно, сортировщику таблиц иногда нравится иметь соответствующее количество пустых <td> элементов (таких же, как элементы вашего заголовка) внутри пустого <tr>.Мой частичный пример ниже

<thead>
    <tr>
        <th class="{sorter: 'text'}'' "><a href="javascript:;" title="Sort" class="arrow"><span>Network Name</span></a></th>
        <th class="{sorter: 'text'} "><a href="javascript:;" title="Sort" class="arrow"><span>Type</span></a></th>
        <th class="{sorter: false}"><a href="javascript:;" title="Sort" class="arrow"><span>Interconnections</span></a></th>
        <th class="{sorter: false}">&nbsp;</th>
    </tr>
</thead>

<tbody>
    <tr style="display:none"><td></td><td></td><td></td><td></td></tr>.........................
...