Плагин jQuery tablesorter - выполнить действие ПОСЛЕ сортировки таблицы

У меня есть таблица, которая успешно отсортирована с помощью плагина tablesorter. Однако я хочу выделить текст в определенном текстовом поле в определенной строке. У него уникальный идентификатор, но когда я помещаю свой код после кода сортировки, он не работает. Вот мой код:

jQuery(document).ready(function() { 
  jQuery("#filetable").tablesorter({
    sortList: [[3,1]],
    widgets: ['zebra'],
    testExtraction: "complex"
  });
  //my new code which doesn't work as expected
  if(jQuery("#new_foldername").length > 0){ 
    jQuery("#new_foldername").focus(function() { jQuery(this).select(); } ); 
  }
}); 

Если я вставлю предупреждение сразу после проверки существования #new_foldername, я увижу предупреждение и текст, выделенный на заднем плане (поэтому мой код для выделения текста работает). Когда я нажимаю, чтобы закрыть предупреждение, таблица заканчивает сортировку... и текст больше не выделяется.

Любые идеи, что может происходить?


person WastedSpace    schedule 21.07.2010    source источник


Ответы (4)


кажется, что сортировка происходит асинхронно. документация предоставляет хук под названием sortEnd, где вы, вероятно, захотите запустить свой код подсветки. см. пример из http://tablesorter.com/docs/example-triggers.html

$(document).ready(function() { 
    // call the tablesorter plugin, the magic happens in the markup 
    $("table").tablesorter(); 

    //assign the sortStart event 
    $("table").bind("sortStart",function() { 
        $("#overlay").show(); 
        }).bind("sortEnd",function() { 
        $("#overlay").hide(); 
    }); 
}); 
person second    schedule 21.07.2010

Спасибо, Роберт,

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

Вместо этого я создал новый виджет следующим образом:

jQuery.tablesorter.addWidget({ 
  id: "highlightNewFolder", 
  // format is called when the on init and when a sorting has finished 
  format: function(table) { 
    if(jQuery("#new_foldername").length > 0){  
      jQuery("#new_foldername").focus();
    }
  } 
});

Теперь это работает. К сожалению, мне пришлось отказаться от выбора/выделения всего текста. По какой-то причине, когда в коде был 'select()', даже фокусировка не работала:

jQuery("#new_foldername").focus(function() { jQuery(this).select(); } ); 

Если у кого-нибудь есть идеи о том, как сфокусировать И выделить весь текст, то это будет очень признательно!

person WastedSpace    schedule 22.07.2010

Вы можете использовать initialized функцию обратного вызова (или привязать к tablesorter-initialized событие) (источник) Примечание: они работают только на Вилка Tablesorter от Mottie, а не оригинал (v2.0.5).

jQuery(document).ready(function() {
    jQuery("#filetable").tablesorter({
        sortList: [[3, 1]],
        widgets: ['zebra'],
        testExtraction: "complex",
        initialized: function() {
            if (jQuery("#new_foldername").length > 0) {
                jQuery("#new_foldername").focus(function() {
                    jQuery(this).select();
                });
            }
        }
    });
});
person darkred    schedule 18.11.2015
comment
Спасибо чувак. Вау, как давно я это выкладывал! С тех пор я перешел на использование Datatables, поэтому не могу проверить ваше предложение, но оно звучит правдоподобно...! - person WastedSpace; 19.11.2015

Может быть, что-то изменилось. Ответы не сработали для меня, но это работает:

$("#filetable").tablesorter().bind("sortEnd", function (e, t) {
    customHilite();
});

Плагин Zebra у меня не работал. может быть, из-за того, как я фильтровал строки.

person Dave    schedule 17.12.2018