2010-06-01 2 views
0

Получил себя в забавной ситуации: на странице есть три таблицы. Используя sortEnd, каждый раз, когда вы сортируете одну таблицу, она сортирует остальные три. Однако, поскольку я привязал sortEnd к функции, которая выполняет сортировку, вы получаете бесконечный цикл сортировки/обращения. Это выглядит так:jQuery бесконечный цикл w/tablesorter

$("table.tablesorter").tablesorter({widgets: ['zebra']}).bind("sortEnd", function() { 
    $(this).find("th.headerSortDown,.headerSortUp").each(function(i) { 
     index = $(this).attr("cellIndex"); 
     order = ($(this).is(".headerSortDown")) ? 1 : 0; 
     $("table.tablesorter").tablesorter({sortList: [[index,order]]}); 
    }); 
}); 

Любые советы по его очистке?

На основе обратной связи ниже от Nick Craver, следующий код, кажется, работает хорошо:

$("table.tablesorter").tablesorter({widgets: ['zebra']}).bind("sortEnd", function() { 
    var current = $(this); 
    if (current.data("sorting")) { 
     current.data("sorting", false); 
     return false; 
    } 
    $(this).find("th.headerSortDown,.headerSortUp").each(function(i) { 
     index = $(this).attr("cellIndex"); 
     order = ($(this).is(".headerSortDown")) ? 1 : 0; 
     $("table.tablesorter").not(current).data("sorting", true).trigger("sorton", [[[index,order]]]); 
    }); 
}); 

ответ

0

Вы можете использовать .data() «помечать» другие таблицы, говоря им, чтобы не выполнить этот обработчик после текущего вида , как это:

$("table.tablesorter").tablesorter({widgets: ['zebra']}).bind("sortEnd", function() { 
    if($(this).data("sorting")) { 
    $(this).data("sorting", false); 
    return; 
    } 
    var current = this; 
    $(this).find("th.headerSortDown,.headerSortUp").each(function(i) { 
    index = $(this).attr("cellIndex"); 
    order = ($(this).is(".headerSortDown")) ? 1 : 0; 
    $("table.tablesorter").not(current).data("sorting", true).tablesorter({sortList: [[index,order]]}); 
    }); 
}); 

Это сохраняет логическое значение в кэше данных на всех других таблиц (уже отфильтрованы this один из запущенных снова, фильтруя его .not()). Когда обработчик выполняет, он проверяет, присутствует ли это значение, если это отключает его для следующего сортировки, но пропускает цикл, который запускает другие таблицы для сортировки снова.

+0

Не работает - есть цепочка других таблиц, запускающих все таблицы .tablesorter, поэтому проверка на текущую не устраняет проблему. – Wells

+0

@Wells - Обновлено, чтобы приспособиться к этому ... Я не могу проверить это с готовностью, поэтому дайте мне знать, есть ли какие-либо проблемы. –

+0

Пробовал ли вы это на странице с тремя таблицами, классифицированными как tablesorter? :) – Wells

Смежные вопросы